aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDanilo Ercoli <ercoli@gmail.com>2015-09-30 16:58:53 +0200
committerDanilo Ercoli <ercoli@gmail.com>2015-09-30 16:58:53 +0200
commit692377aee350d5380ac05a04f3367e8937303835 (patch)
treef5cb9c4cbc6cd9af3a2747dd210269e070079152
parent6a90e3fe46e24ee40abdc4a7f8f0db06f157900c (diff)
downloadgradle-perf-android-medium-692377aee350d5380ac05a04f3367e8937303835.tar.gz
Add new config activity
-rw-r--r--WordPress/src/main/AndroidManifest.xml8
-rw-r--r--WordPress/src/main/java/org/wordpress/android/ui/main/SitePickerAdapter.java34
-rw-r--r--WordPress/src/main/java/org/wordpress/android/ui/stats/StatsWidgetConfigureActivity2.java132
-rw-r--r--WordPress/src/main/res/xml/stats_widget_info.xml2
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">