diff options
author | Danilo Ercoli <ercoli@gmail.com> | 2015-09-30 16:58:53 +0200 |
---|---|---|
committer | Danilo Ercoli <ercoli@gmail.com> | 2015-09-30 16:58:53 +0200 |
commit | 692377aee350d5380ac05a04f3367e8937303835 (patch) | |
tree | f5cb9c4cbc6cd9af3a2747dd210269e070079152 | |
parent | 6a90e3fe46e24ee40abdc4a7f8f0db06f157900c (diff) | |
download | gradle-perf-android-medium-692377aee350d5380ac05a04f3367e8937303835.tar.gz |
Add new config activity
4 files changed, 158 insertions, 18 deletions
diff --git a/WordPress/src/main/AndroidManifest.xml b/WordPress/src/main/AndroidManifest.xml index d7f6d1236..f6a09eb30 100644 --- a/WordPress/src/main/AndroidManifest.xml +++ b/WordPress/src/main/AndroidManifest.xml @@ -178,6 +178,14 @@ </intent-filter> </activity> + <activity android:name=".ui.stats.StatsWidgetConfigureActivity2" + android:theme="@style/CalypsoTheme" + android:label="@string/site_picker_title"> + <intent-filter> + <action android:name="android.appwidget.action.APPWIDGET_CONFIGURE"/> + </intent-filter> + </activity> + <activity android:name=".ui.WPWebViewActivity" android:theme="@style/Calypso.NoActionBar"/> diff --git a/WordPress/src/main/java/org/wordpress/android/ui/main/SitePickerAdapter.java b/WordPress/src/main/java/org/wordpress/android/ui/main/SitePickerAdapter.java index 730fcfdf2..74c9cda46 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/main/SitePickerAdapter.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/main/SitePickerAdapter.java @@ -29,13 +29,13 @@ import java.util.HashSet; import java.util.List; import java.util.Map; -class SitePickerAdapter extends RecyclerView.Adapter<SitePickerAdapter.SiteViewHolder> { +public class SitePickerAdapter extends RecyclerView.Adapter<SitePickerAdapter.SiteViewHolder> { - interface OnSiteClickListener { + public interface OnSiteClickListener { void onSiteClick(SiteRecord site); } - interface OnSelectedCountChangedListener { + public interface OnSelectedCountChangedListener { void onSelectedCountChanged(int numSelected); } @@ -115,11 +115,11 @@ class SitePickerAdapter extends RecyclerView.Adapter<SitePickerAdapter.SiteViewH return mSites.get(position); } - void setOnSelectedCountChangedListener(OnSelectedCountChangedListener listener) { + public void setOnSelectedCountChangedListener(OnSelectedCountChangedListener listener) { mSelectedCountListener = listener; } - void setOnSiteClickListener(OnSiteClickListener listener) { + public void setOnSiteClickListener(OnSiteClickListener listener) { mSiteSelectedListener = listener; } @@ -298,7 +298,7 @@ class SitePickerAdapter extends RecyclerView.Adapter<SitePickerAdapter.SiteViewH return sites; } - SiteList getHiddenSites() { + public SiteList getHiddenSites() { SiteList hiddenSites = new SiteList(); for (SiteRecord site: mSites) { if (site.isHidden) { @@ -436,15 +436,15 @@ class SitePickerAdapter extends RecyclerView.Adapter<SitePickerAdapter.SiteViewH /** * SiteRecord is a simplified version of the full account (blog) record */ - static class SiteRecord { - final int localId; - final int blogId; - final String blogName; - final String homeURL; - final String url; - final String blavatarUrl; - final boolean isDotCom; - boolean isHidden; + public static class SiteRecord { + public final int localId; + public final int blogId; + public final String blogName; + public final String homeURL; + public final String url; + public final String blavatarUrl; + public final boolean isDotCom; + public boolean isHidden; SiteRecord(Map<String, Object> account) { localId = MapUtils.getMapInt(account, "id"); @@ -457,7 +457,7 @@ class SitePickerAdapter extends RecyclerView.Adapter<SitePickerAdapter.SiteViewH isHidden = MapUtils.getMapBool(account, "isHidden"); } - String getBlogNameOrHomeURL() { + public String getBlogNameOrHomeURL() { if (TextUtils.isEmpty(blogName)) { return homeURL; } @@ -465,7 +465,7 @@ class SitePickerAdapter extends RecyclerView.Adapter<SitePickerAdapter.SiteViewH } } - static class SiteList extends ArrayList<SiteRecord> { + public static class SiteList extends ArrayList<SiteRecord> { SiteList() { } SiteList(List<Map<String, Object>> accounts) { if (accounts != null) { diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsWidgetConfigureActivity2.java b/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsWidgetConfigureActivity2.java new file mode 100644 index 000000000..b25610b04 --- /dev/null +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsWidgetConfigureActivity2.java @@ -0,0 +1,132 @@ +package org.wordpress.android.ui.stats; + +/** + * The configuration screen for the StatsWidgetProvider widget. + */ + +import android.appwidget.AppWidgetManager; +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; +import android.support.v7.app.ActionBar; +import android.support.v7.app.AppCompatActivity; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.view.View; + +import org.wordpress.android.R; +import org.wordpress.android.WordPress; +import org.wordpress.android.models.AccountHelper; +import org.wordpress.android.ui.main.SitePickerAdapter; +import org.wordpress.android.util.ToastUtils; + +import java.util.List; +import java.util.Map; + +public class StatsWidgetConfigureActivity2 extends AppCompatActivity + implements SitePickerAdapter.OnSiteClickListener { + + private SitePickerAdapter mAdapter; + private RecyclerView mRecycleView; + private int mAppWidgetId = AppWidgetManager.INVALID_APPWIDGET_ID; + + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + // Find the widget id from the intent. + Intent intent = getIntent(); + Bundle extras = intent.getExtras(); + if (extras != null) { + mAppWidgetId = extras.getInt( + AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); + } + + // Set the result to CANCELED. This will cause the widget host to cancel out of the widget + // placement if they press the back button. + setResult(RESULT_CANCELED, new Intent().putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, mAppWidgetId)); + + // Intent without the widget id, just bail. + if (mAppWidgetId == AppWidgetManager.INVALID_APPWIDGET_ID) { + finish(); + return; + } + + // If not signed into WordPress inform the user + if (!AccountHelper.isSignedIn()) { + ToastUtils.showToast(getBaseContext(), R.string.stats_widget_error_login, ToastUtils.Duration.LONG); + finish(); + return; + } + + // If no visible blogs + List<Map<String, Object>> accounts = WordPress.wpDB.getBlogsBy("isHidden = 0", null); + if (accounts.size() == 0) { + ToastUtils.showToast(getBaseContext(), R.string.stats_widget_error_no_visible_blog, ToastUtils.Duration.LONG); + finish(); + return; + } + + // If one blog only, skip config + if (accounts.size() == 1) { + Map<String, Object> account = accounts.get(0); + Integer localID = (Integer) account.get("id"); + addWidgetToScreenAndFinish(localID); + return; + } + + setContentView(R.layout.site_picker_activity); + + final boolean isInSearchMode = false; + String lastSearch = ""; + setNewAdapter(lastSearch, isInSearchMode); + + setupActionBar(); + setupRecycleView(); + } + + private void setupRecycleView() { + mRecycleView = (RecyclerView) findViewById(R.id.recycler_view); + mRecycleView.setLayoutManager(new LinearLayoutManager(this)); + mRecycleView.setScrollBarStyle(View.SCROLLBARS_OUTSIDE_OVERLAY); + mRecycleView.setItemAnimator(null); + mRecycleView.setAdapter(getAdapter()); + } + + private void setupActionBar() { + ActionBar actionBar = getSupportActionBar(); + if (actionBar != null) { + actionBar.setHomeAsUpIndicator(R.drawable.ic_close_white_24dp); + actionBar.setHomeButtonEnabled(false); + actionBar.setDisplayHomeAsUpEnabled(true); + } + } + + private SitePickerAdapter getAdapter() { + if (mAdapter == null) { + setNewAdapter("", false); + } + return mAdapter; + } + + private void setNewAdapter(String lastSearch, boolean isInSearchMode) { + mAdapter = new SitePickerAdapter(this, 0, lastSearch, isInSearchMode); + mAdapter.setOnSiteClickListener(this); + } + + @Override + public void onSiteClick(SitePickerAdapter.SiteRecord site) { + addWidgetToScreenAndFinish(site.localId); + } + + private void addWidgetToScreenAndFinish(int localID) { + final Context context = StatsWidgetConfigureActivity2.this; + StatsWidgetProvider.setupNewWidget(context, mAppWidgetId, localID); + // Make sure we pass back the original appWidgetId + Intent resultValue = new Intent(); + resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, mAppWidgetId); + setResult(RESULT_OK, resultValue); + finish(); + } +} diff --git a/WordPress/src/main/res/xml/stats_widget_info.xml b/WordPress/src/main/res/xml/stats_widget_info.xml index e04705746..acbcbac09 100644 --- a/WordPress/src/main/res/xml/stats_widget_info.xml +++ b/WordPress/src/main/res/xml/stats_widget_info.xml @@ -3,7 +3,7 @@ xmlns:android="http://schemas.android.com/apk/res/android" android:initialLayout="@layout/stats_widget_layout" android:minHeight="@dimen/stats_widget_one_cell" - android:configure="org.wordpress.android.ui.stats.StatsWidgetConfigureActivity" + android:configure="org.wordpress.android.ui.stats.StatsWidgetConfigureActivity2" android:minWidth="@dimen/stats_widget_width" android:previewImage="@drawable/stats_widget_preview" android:updatePeriodMillis="3600000"> |