Bug 1220928 - Handle back button when in client's child view. r=sebastian
MozReview-Commit-ID: BDiyR5JCHQD
--- a/mobile/android/base/java/org/mozilla/gecko/home/CombinedHistoryAdapter.java
+++ b/mobile/android/base/java/org/mozilla/gecko/home/CombinedHistoryAdapter.java
@@ -190,20 +190,24 @@ public class CombinedHistoryAdapter exte
}
// Handle "back" view.
clientChildren.add(null);
clientChildren.addAll(remoteClients.get(transformAdapterPositionForDataStructure(ItemType.CLIENT, parentPosition)).tabs);
inChildView = true;
notifyDataSetChanged();
}
- public void exitChildView() {
+ public boolean exitChildView() {
+ if (!inChildView) {
+ return false;
+ }
inChildView = false;
clientChildren.clear();
notifyDataSetChanged();
+ return true;
}
private ItemType getItemTypeForPosition(int position) {
return ItemType.viewTypeToItemType(getItemViewType(position));
}
/**
* Transform an adapter position to the position for the data structure backing the item type.
--- a/mobile/android/base/java/org/mozilla/gecko/home/CombinedHistoryRecyclerView.java
+++ b/mobile/android/base/java/org/mozilla/gecko/home/CombinedHistoryRecyclerView.java
@@ -4,16 +4,17 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
package org.mozilla.gecko.home;
import android.content.Context;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.AttributeSet;
+import android.view.KeyEvent;
import android.view.View;
import org.mozilla.gecko.db.RemoteClient;
import org.mozilla.gecko.home.CombinedHistoryPanel.OnPanelLevelChangeListener;
import org.mozilla.gecko.home.CombinedHistoryPanel.OnPanelLevelChangeListener.PanelLevel;
import org.mozilla.gecko.Telemetry;
import org.mozilla.gecko.TelemetryContract;
import org.mozilla.gecko.widget.RecyclerViewClickSupport;
@@ -45,16 +46,29 @@ public class CombinedHistoryRecyclerView
private void init(Context context) {
LinearLayoutManager layoutManager = new LinearLayoutManager(context);
layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
setLayoutManager(layoutManager);
RecyclerViewClickSupport.addTo(this)
.setOnItemClickListener(this)
.setOnItemLongClickListener(this);
+
+ setOnKeyListener(new View.OnKeyListener() {
+ @Override
+ public boolean onKey(View v, int keyCode, KeyEvent event) {
+ final int action = event.getAction();
+
+ // If the user hit the BACK key, try to move to the parent folder.
+ if (action == KeyEvent.ACTION_UP && keyCode == KeyEvent.KEYCODE_BACK) {
+ return ((CombinedHistoryAdapter) getAdapter()).exitChildView();
+ }
+ return false;
+ }
+ });
}
public void setOnHistoryClickedListener(HomePager.OnUrlOpenListener listener) {
this.mOnUrlOpenListener = listener;
}
public void setOnPanelLevelChangeListener(OnPanelLevelChangeListener listener) {
this.mOnPanelLevelChangeListener = listener;