Dr0ptp4kt has uploaded a new change for review. https://gerrit.wikimedia.org/r/109501
Change subject: Color toggle Wikipedia icon and search bar when on W0 network. ...................................................................... Color toggle Wikipedia icon and search bar when on W0 network. Change-Id: I1f634667eea0b8c3b72389d0532a2bad8c4cd1a2 --- M wikipedia/res/layout/fragment_search.xml M wikipedia/res/values/strings.xml M wikipedia/src/main/java/org/wikipedia/WikipediaApp.java A wikipedia/src/main/java/org/wikipedia/events/StartScreenLoadedEvent.java A wikipedia/src/main/java/org/wikipedia/events/WikipediaZeroStateChangeEvent.java M wikipedia/src/main/java/org/wikipedia/networking/ConnectionChangeReceiver.java M wikipedia/src/main/java/org/wikipedia/page/PageActivity.java M wikipedia/src/main/java/org/wikipedia/search/SearchArticlesFragment.java 8 files changed, 179 insertions(+), 40 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/apps/android/wikipedia refs/changes/01/109501/1 diff --git a/wikipedia/res/layout/fragment_search.xml b/wikipedia/res/layout/fragment_search.xml index a9562d7..7b3b102 100644 --- a/wikipedia/res/layout/fragment_search.xml +++ b/wikipedia/res/layout/fragment_search.xml @@ -1,12 +1,14 @@ <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:id="@+id/search_bar_container" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="48dp" android:background="@android:color/background_light" > <LinearLayout + android:id="@+id/navbar" android:orientation="horizontal" android:layout_height="match_parent" android:layout_width="match_parent" @@ -26,6 +28,7 @@ android:src="@drawable/ic_drawer" /> <ImageView + android:id="@+id/wikipedia_icon" android:layout_height="32dp" android:layout_width="32dp" android:layout_marginRight="0dp" @@ -54,6 +57,7 @@ android:selectAllOnFocus="true" android:singleLine="true" android:imeOptions="actionDone" + android:textCursorDrawable="@null" /> <ProgressBar android:id="@+id/search_progress" diff --git a/wikipedia/res/values/strings.xml b/wikipedia/res/values/strings.xml index 9f87acb..f289903 100644 --- a/wikipedia/res/values/strings.xml +++ b/wikipedia/res/values/strings.xml @@ -56,4 +56,5 @@ <string name="zero_free_verbiage">Wikipedia Zero On (No Data Charges)</string> <string name="zero_charged_verbiage">Wikipedia Zero OFF (STANDARD DATA CHARGES MAY APPLY)</string> + <string name="zero_search_hint">Search Wikipedia Zero</string> </resources> \ No newline at end of file diff --git a/wikipedia/src/main/java/org/wikipedia/WikipediaApp.java b/wikipedia/src/main/java/org/wikipedia/WikipediaApp.java index 6c7b4a1..4c62fe5 100644 --- a/wikipedia/src/main/java/org/wikipedia/WikipediaApp.java +++ b/wikipedia/src/main/java/org/wikipedia/WikipediaApp.java @@ -2,7 +2,9 @@ import android.app.Application; import android.content.Context; +import android.content.IntentFilter; import android.content.SharedPreferences; +import android.net.ConnectivityManager; import android.os.Build; import android.preference.PreferenceManager; import android.webkit.WebView; @@ -18,6 +20,7 @@ import org.wikipedia.data.DBOpenHelper; import org.wikipedia.history.HistoryEntry; import org.wikipedia.history.HistoryEntryPersister; +import org.wikipedia.networking.ConnectionChangeReceiver; import org.wikipedia.pageimages.PageImage; import org.wikipedia.pageimages.PageImagePersister; import org.wikipedia.savedpages.SavedPage; @@ -49,6 +52,8 @@ // Reload in onCreate to override public static String PROTOCOL = "https"; + private ConnectionChangeReceiver connChangeReceiver; + @Override public void onCreate() { super.onCreate(); @@ -70,6 +75,10 @@ } Api.setConnectionFactory(new OkHttpConnectionFactory(this)); + + IntentFilter connFilter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION); + connChangeReceiver = new ConnectionChangeReceiver(); + this.registerReceiver(connChangeReceiver, connFilter); } public Bus getBus() { @@ -140,4 +149,13 @@ } return persisters.get(cls.getCanonicalName()); } + + private boolean wikipediaZeroDisposition = false; + public void setWikipediaZeroDisposition(boolean b) { + wikipediaZeroDisposition = b; + } + + public boolean getWikipediaZeroDisposition() { + return wikipediaZeroDisposition; + } } diff --git a/wikipedia/src/main/java/org/wikipedia/events/StartScreenLoadedEvent.java b/wikipedia/src/main/java/org/wikipedia/events/StartScreenLoadedEvent.java new file mode 100644 index 0000000..bf12f64 --- /dev/null +++ b/wikipedia/src/main/java/org/wikipedia/events/StartScreenLoadedEvent.java @@ -0,0 +1,4 @@ +package org.wikipedia.events; + +public class StartScreenLoadedEvent { +} diff --git a/wikipedia/src/main/java/org/wikipedia/events/WikipediaZeroStateChangeEvent.java b/wikipedia/src/main/java/org/wikipedia/events/WikipediaZeroStateChangeEvent.java new file mode 100644 index 0000000..22c5e7d --- /dev/null +++ b/wikipedia/src/main/java/org/wikipedia/events/WikipediaZeroStateChangeEvent.java @@ -0,0 +1,4 @@ +package org.wikipedia.events; + +public class WikipediaZeroStateChangeEvent { +} \ No newline at end of file diff --git a/wikipedia/src/main/java/org/wikipedia/networking/ConnectionChangeReceiver.java b/wikipedia/src/main/java/org/wikipedia/networking/ConnectionChangeReceiver.java index d2c5b3c..0752cbe 100644 --- a/wikipedia/src/main/java/org/wikipedia/networking/ConnectionChangeReceiver.java +++ b/wikipedia/src/main/java/org/wikipedia/networking/ConnectionChangeReceiver.java @@ -8,20 +8,22 @@ import android.os.Handler; import android.os.Message; import android.util.Log; -import android.widget.Toast; +import com.squareup.otto.Bus; import org.wikipedia.WikipediaApp; +import org.wikipedia.events.WikipediaZeroStateChangeEvent; import org.wikipedia.zero.WikipediaZeroTask; import org.wikipedia.R; + public class ConnectionChangeReceiver extends BroadcastReceiver { - private static boolean previousZeroState = false; private WikipediaApp app; private WikipediaZeroTask curZeroTask; private static final int MESSAGE_ZERO = 1; + private static Bus bus; public void onReceive(final Context context, Intent intent) { - app = (WikipediaApp)context.getApplicationContext(); + app = (WikipediaApp)context; ConnectivityManager conn = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo networkInfo = conn.getActiveNetworkInfo(); @@ -29,30 +31,31 @@ if (networkInfo != null) { NetworkInfo.State currentState = networkInfo.getState(); - // we care both if a new network connection was made or when one of 2 or more connections is closed - if (currentState == NetworkInfo.State.CONNECTED || currentState == NetworkInfo.State.DISCONNECTED) { + /* + We care both if a new network connection was made or when one of 2 or more connections is closed. + NetworkInfo.State.CONNECTED => isConnected(), but let's call isConnected as documentation suggests. + We don't need to check against the zeroconfig API unless the (latest) W0 state is *on* (true). + */ + if (app.getWikipediaZeroDisposition() && + (currentState == NetworkInfo.State.CONNECTED || currentState == NetworkInfo.State.DISCONNECTED) && + networkInfo.isConnected() + ) { - // OK, now check if we're eligible for zero-rating + // OK, now check if we're still eligible for zero-rating Handler wikipediaZeroHandler = new Handler(new Handler.Callback(){ @Override public boolean handleMessage(Message msg) { WikipediaZeroTask zeroTask = new WikipediaZeroTask(app.getAPIForSite(app.getPrimarySite())) { @Override - public void onFinish(Boolean result) { - Log.d("Wikipedia", "Wikipedia Zero Eligibility Status: " + result); + public void onFinish(Boolean isWikipediaZeroEligible) { + Log.d("Wikipedia", "Wikipedia Zero Eligibility Status: " + isWikipediaZeroEligible); - String toastVerbiage; - if (!previousZeroState && result) { - toastVerbiage = context.getString(R.string.zero_free_verbiage); - } else if (previousZeroState && !result) { - toastVerbiage = context.getString(R.string.zero_charged_verbiage); - } else { - return; + if (!isWikipediaZeroEligible) { + app.setWikipediaZeroDisposition(isWikipediaZeroEligible); + bus = app.getBus(); + bus.post(new WikipediaZeroStateChangeEvent()); + curZeroTask = null; } - previousZeroState = result; - Toast.makeText(context, toastVerbiage, Toast.LENGTH_LONG).show(); - - curZeroTask = null; } @Override diff --git a/wikipedia/src/main/java/org/wikipedia/page/PageActivity.java b/wikipedia/src/main/java/org/wikipedia/page/PageActivity.java index 9781116..4a706d1 100644 --- a/wikipedia/src/main/java/org/wikipedia/page/PageActivity.java +++ b/wikipedia/src/main/java/org/wikipedia/page/PageActivity.java @@ -1,18 +1,18 @@ package org.wikipedia.page; import android.content.Intent; -import android.content.IntentFilter; -import android.net.ConnectivityManager; import android.os.Bundle; +import android.os.Handler; +import android.os.Message; import android.support.v4.app.FragmentActivity; import android.support.v4.widget.DrawerLayout; +import android.widget.Toast; import com.squareup.otto.Bus; import com.squareup.otto.Subscribe; import org.wikipedia.*; import org.wikipedia.events.*; import org.wikipedia.history.HistoryEntry; import org.wikipedia.interlanguage.LangLinksActivity; -import org.wikipedia.networking.ConnectionChangeReceiver; import org.wikipedia.recurring.RecurringTasksExecutor; import org.wikipedia.search.SearchArticlesFragment; @@ -29,7 +29,8 @@ private PageViewFragment curPageFragment; - private ConnectionChangeReceiver connChangeReceiver; + private boolean pausedStateOfZero; + private static final int MESSAGE_START_SCREEN = 1; @Override public void onCreate(Bundle savedInstanceState) { @@ -57,11 +58,23 @@ searchAriclesFragment.setDrawerLayout(drawerLayout); - IntentFilter connFilter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION); - connChangeReceiver = new ConnectionChangeReceiver(); - this.registerReceiver(connChangeReceiver, connFilter); - // Kickstart network ops. currently, just to initiate Wikipedia Zero check - connChangeReceiver.onReceive(app, intent); + Handler startScreenHandler = new Handler(new Handler.Callback(){ + @Override + public boolean handleMessage(Message msg) { + boolean disposition = false; + if (!app.getWikipediaZeroDisposition() && disposition) { + app.setWikipediaZeroDisposition(disposition); + bus.post(new WikipediaZeroStateChangeEvent()); + } + return true; + } + }); + + startScreenHandler.removeMessages(MESSAGE_START_SCREEN); + Message startScreenMessage = Message.obtain(); + startScreenMessage.what = MESSAGE_START_SCREEN; + startScreenMessage.obj = "start_screen_fire"; + startScreenHandler.sendMessage(startScreenMessage); // Conditionally execute all recurring tasks new RecurringTasksExecutor(this).run(); @@ -122,6 +135,19 @@ } } + @Subscribe + public void onWikipediaZeroStateChangeEvent(WikipediaZeroStateChangeEvent event) { + boolean latestWikipediaZeroDisposition = app.getWikipediaZeroDisposition(); + + if (pausedStateOfZero && !latestWikipediaZeroDisposition) { + Toast.makeText(app, getString(R.string.zero_charged_verbiage), Toast.LENGTH_LONG).show(); + } else if (!pausedStateOfZero && latestWikipediaZeroDisposition) { + Toast.makeText(app, getString(R.string.zero_free_verbiage), Toast.LENGTH_LONG).show(); + } + + pausedStateOfZero = latestWikipediaZeroDisposition; + } + @Override protected void onStart() { super.onStart(); @@ -132,17 +158,24 @@ } @Override + protected void onResume() { + super.onStart(); + boolean latestWikipediaZeroDispostion = app.getWikipediaZeroDisposition(); + if (pausedStateOfZero && !latestWikipediaZeroDispostion) { + bus.post(new WikipediaZeroStateChangeEvent()); + } + } + + @Override + public void onPause() { + super.onResume(); + pausedStateOfZero = app.getWikipediaZeroDisposition(); + } + + @Override protected void onStop() { super.onStop(); bus.unregister(this); bus = null; - } - - @Override - public void onDestroy() { - super.onDestroy(); - if (connChangeReceiver != null) { - this.unregisterReceiver(connChangeReceiver); - } } } diff --git a/wikipedia/src/main/java/org/wikipedia/search/SearchArticlesFragment.java b/wikipedia/src/main/java/org/wikipedia/search/SearchArticlesFragment.java index a204749..4f25ade 100644 --- a/wikipedia/src/main/java/org/wikipedia/search/SearchArticlesFragment.java +++ b/wikipedia/src/main/java/org/wikipedia/search/SearchArticlesFragment.java @@ -1,6 +1,8 @@ package org.wikipedia.search; import android.content.Context; +import android.graphics.Color; +import android.graphics.drawable.ColorDrawable; import android.os.Bundle; import android.os.Handler; import android.os.Message; @@ -15,6 +17,7 @@ import com.squareup.picasso.Picasso; import org.wikipedia.*; import org.wikipedia.events.NewWikiPageNavigationEvent; +import org.wikipedia.events.WikipediaZeroStateChangeEvent; import org.wikipedia.history.HistoryEntry; import org.wikipedia.page.PageActionsHandler; import org.wikipedia.pageimages.PageImagesTask; @@ -29,14 +32,21 @@ private WikipediaApp app; + private LinearLayout searchBarContainer; + private LinearLayout navbar; private View searchBarIcon; private EditText searchTermText; private ListView searchResultsList; private ProgressBar searchProgress; private View searchNetworkError; private View searchNoResults; - private View searchBarMenuButton; - private View drawerIndicator; + private ImageView searchBarMenuButton; + private ImageView drawerIndicator; + private ImageView wikipediaIcon; + + private int navbarColor; + private int searchTermTextColor; + private int searchTermHintTextColor; private SearchResultAdapter adapter; @@ -51,6 +61,8 @@ private DrawerLayout drawerLayout; private SearchArticlesTask curSearchTask; + + private boolean pausedStateOfZero; /** * Displays results passed to it as search suggestions. @@ -105,13 +117,17 @@ isSearchActive = savedInstanceState.getBoolean("isSearchActive"); } + searchBarContainer = (LinearLayout) parentLayout.findViewById(R.id.search_bar_container); + navbar = (LinearLayout) parentLayout.findViewById(R.id.navbar); searchTermText = (EditText) parentLayout.findViewById(R.id.search_term_text); + searchTermTextColor = searchTermText.getCurrentTextColor(); searchResultsList = (ListView) parentLayout.findViewById(R.id.search_results_list); searchProgress = (ProgressBar) parentLayout.findViewById(R.id.search_progress); searchBarIcon = parentLayout.findViewById(R.id.search_bar_icon); searchNetworkError = parentLayout.findViewById(R.id.search_network_error); - searchBarMenuButton = parentLayout.findViewById(R.id.search_bar_show_menu); - drawerIndicator = parentLayout.findViewById(R.id.search_drawer_indicator); + searchBarMenuButton = (ImageView)parentLayout.findViewById(R.id.search_bar_show_menu); + drawerIndicator = (ImageView)parentLayout.findViewById(R.id.search_drawer_indicator); + wikipediaIcon = (ImageView)parentLayout.findViewById(R.id.wikipedia_icon); searchNoResults = parentLayout.findViewById(R.id.search_results_empty); PopupMenu pageActionsMenu = new PopupMenu(getActivity(), searchBarMenuButton); @@ -354,6 +370,62 @@ Utils.ensureTranslationY(getView(), 0); } + @Subscribe + public void onWikipediaZeroStateChangeEvent(WikipediaZeroStateChangeEvent event) { + if (app.getWikipediaZeroDisposition()) { + setWikipediaZeroChrome(); + } else { + setNormalChrome(); + } + } + + private void setWikipediaZeroChrome() { + try { + navbarColor = ((ColorDrawable)(searchBarContainer.getBackground())).getColor(); + searchTermTextColor = searchTermText.getCurrentTextColor(); + searchTermHintTextColor = searchTermText.getCurrentHintTextColor(); + } catch (Exception e) { + // just in case something in the layout changes out from underneath this code + navbarColor = Color.WHITE; + searchTermTextColor = Color.BLACK; + searchTermHintTextColor = Color.GRAY; + } + + navbar.setBackgroundColor(Color.BLACK); + drawerIndicator.setColorFilter(Color.WHITE); + wikipediaIcon.setColorFilter(Color.WHITE); + searchTermText.setTextColor(Color.WHITE); + searchTermText.setHint(R.string.zero_search_hint); + searchBarMenuButton.setColorFilter(Color.WHITE); + Utils.ensureTranslationY(getView(), 0); + } + + private void setNormalChrome() { + navbar.setBackgroundColor(navbarColor); + drawerIndicator.clearColorFilter(); + wikipediaIcon.clearColorFilter(); + searchTermText.setTextColor(searchTermTextColor); + searchTermText.setHintTextColor(searchTermHintTextColor); + searchTermText.setHint(R.string.search_hint); + searchBarMenuButton.clearColorFilter(); + Utils.ensureTranslationY(getView(), 0); + } + + @Override + public void onPause() { + super.onResume(); + pausedStateOfZero = app.getWikipediaZeroDisposition(); + } + + @Override + public void onResume() { + super.onResume(); + boolean latestWikipediaZeroDispostion = app.getWikipediaZeroDisposition(); + if (pausedStateOfZero != latestWikipediaZeroDispostion) { + app.getBus().post(new WikipediaZeroStateChangeEvent()); + } + } + @Override public void onStart() { super.onStart(); -- To view, visit https://gerrit.wikimedia.org/r/109501 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I1f634667eea0b8c3b72389d0532a2bad8c4cd1a2 Gerrit-PatchSet: 1 Gerrit-Project: apps/android/wikipedia Gerrit-Branch: master Gerrit-Owner: Dr0ptp4kt <[email protected]> _______________________________________________ MediaWiki-commits mailing list [email protected] https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits
