8000 Merge pull request #23 from duckduckgo/feature/improve_tab_switcher_ui · roychowdhuryrohit-dev/Android@c22a75c · GitHub
[go: up one dir, main page]

Skip to content

Commit c22a75c

Browse files
authored
Merge pull request duckduckgo#23 from duckduckgo/feature/improve_tab_switcher_ui
Improve tab switcher ui
2 parents d85b0db + 15ff173 commit c22a75c

29 files changed

+295
-62
lines changed

app/lint.xml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<lint>
3+
<issue id="IconLocation">
4+
<ignore path="src/main/res/drawable/fire_temp.png" />
5+
<ignore path="src/main/res/drawable/globe_temp.png" />
6+
</issue>
7+
</lint>
Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.duckduckgo.mobile.android.duckduckgo.ui.bookmarks.itemtouchhelper;
1+
package com.duckduckgo.mobile.android.duckduckgo.ui.base.itemtouchhelper;
22

33
import android.support.v7.widget.RecyclerView;
44

@@ -7,8 +7,6 @@
77
*/
88

99
public interface ItemTouchHelperAdapter {
10-
boolean isEditable();
11-
1210
boolean onItemMove(int fromPosition, int toPosition);
1311

1412
void onItemDismiss(RecyclerView.ViewHolder holder, int position);
Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,43 @@
1-
package com.duckduckgo.mobile.android.duckduckgo.ui.bookmarks.itemtouchhelper;
1+
package com.duckduckgo.mobile.android.duckduckgo.ui.base.itemtouchhelper;
22

33
import android.graphics.Canvas;
44
import android.support.v7.widget.RecyclerView;
55
import android.support.v7.widget.helper.ItemTouchHelper;
66

77
/**
8-
* Created by fgei on 6/9/17.
8+
* Created by fgei on 6/23/17.
99
*/
1010

11-
public class DragItemTouchHelperCallback extends ItemTouchHelper.Callback {
11+
public abstract class ItemTouchHelperCallback<T extends ItemTouchHelperAdapter> extends ItemTouchHelper.Callback {
1212

1313
private static final float ALPHA_FULL = 1.0f;
1414

15-
private final ItemTouchHelperAdapter adapter;
15+
private final T adapter;
1616

17-
public DragItemTouchHelperCallback(ItemTouchHelperAdapter adapter) {
17+
public abstract boolean isItemMoveEnabled();
18+
19+
public ItemTouchHelperCallback(T adapter) {
1820
this.adapter = adapter;
1921
}
2022

23+
protected T getAdapter() {
24+
return adapter;
25+
}
26+
2127
@Override
2228
public boolean isLongPressDragEnabled() {
2329
return false;
2430
}
2531

2632
@Override
2733
public boolean isItemViewSwipeEnabled() {
28-
return adapter.isEditable();
34+
return true;
2935
}
3036

3137
@Override
3238
public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
33-
final int dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN;
34-
final int swipeFlags = ItemTouchHelper.START | ItemTouchHelper.END;
39+
final int dragFlags = isItemMoveEnabled() ? ItemTouchHelper.UP | ItemTouchHelper.DOWN : 0;
40+
final int swipeFlags = isItemViewSwipeEnabled() ? ItemTouchHelper.START | ItemTouchHelper.END : 0;
3541
return makeMovementFlags(dragFlags, swipeFlags);
3642
}
3743

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.duckduckgo.mobile.android.duckduckgo.ui.bookmarks.itemtouchhelper;
1+
package com.duckduckgo.mobile.android.duckduckgo.ui.base.itemtouchhelper;
22

33
import android.support.v7.widget.RecyclerView;
44

app/src/main/java/com/duckduckgo/mobile/android/duckduckgo/ui/bookmarks/BookmarkViewHolder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
import android.widget.TextView;
1212

1313
import com.duckduckgo.mobile.android.duckduckgo.R;
14-
import com.duckduckgo.mobile.android.duckduckgo.ui.bookmarks.itemtouchhelper.OnStartDragListener;
14+
import com.duckduckgo.mobile.android.duckduckgo.ui.base.itemtouchhelper.OnStartDragListener;
1515

1616
import butterknife.BindView;
1717
import butterknife.ButterKnife;

app/src/main/java/com/duckduckgo/mobile/android/duckduckgo/ui/bookmarks/BookmarksActivity.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@
1616

1717
import com.duckduckgo.mobile.android.duckduckgo.Injector;
1818
import com.duckduckgo.mobile.android.duckduckgo.R;
19-
import com.duckduckgo.mobile.android.duckduckgo.ui.bookmarks.itemtouchhelper.DragItemTouchHelperCallback;
20-
import com.duckduckgo.mobile.android.duckduckgo.ui.bookmarks.itemtouchhelper.OnStartDragListener;
19+
import com.duckduckgo.mobile.android.duckduckgo.ui.base.itemtouchhelper.OnStartDragListener;
20+
import com.duckduckgo.mobile.android.duckduckgo.ui.bookmarks.itemtouchhelper.BookmarksTouchHelperCallback;
2121
import com.duckduckgo.mobile.android.duckduckgo.ui.editbookmark.EditBookmarkDialogFragment;
2222

2323
import java.util.List;
@@ -205,7 +205,7 @@ public void onBookmarksSwap(int fromPosition, int toPosition) {
205205
});
206206
recyclerView.setLayoutManager(new LinearLayoutManager(this));
207207
recyclerView.setAdapter(adapter);
208-
ItemTouchHelper.Callback callback = new DragItemTouchHelperCallback(adapter);
208+
ItemTouchHelper.Callback callback = new BookmarksTouchHelperCallback(adapter);
209209
itemTouchHelper = new ItemTouchHelper(callback);
210210
itemTouchHelper.attachToRecyclerView(recyclerView);
211211
}

app/src/main/java/com/duckduckgo/mobile/android/duckduckgo/ui/bookmarks/BookmarksAdapter.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55
import android.view.View;
66
import android.view.ViewGroup;
77

8-
import com.duckduckgo.mobile.android.duckduckgo.ui.bookmarks.itemtouchhelper.ItemTouchHelperAdapter;
9-
import com.duckduckgo.mobile.android.duckduckgo.ui.bookmarks.itemtouchhelper.OnStartDragListener;
8+
import com.duckduckgo.mobile.android.duckduckgo.ui.base.itemtouchhelper.OnStartDragListener;
9+
import com.duckduckgo.mobile.android.duckduckgo.ui.bookmarks.itemtouchhelper.BookmarksTouchHelperAdapter;
1010

1111
import java.util.ArrayList;
1212
import java.util.List;
@@ -15,7 +15,7 @@
1515
* Created by fgei on 6/12/17.
1616
*/
1717

18-
public class BookmarksAdapter extends RecyclerView.Adapter<BookmarkViewHolder> implements ItemTouchHelperAdapter {
18+
public class BookmarksAdapter extends RecyclerView.Adapter<BookmarkViewHolder> implements BookmarksTouchHelperAdapter {
1919

2020
interface OnBookmarkListener {
2121
void onBookmarkSelected(View v, int position);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package com.duckduckgo.mobile.android.duckduckgo.ui.bookmarks.itemtouchhelper;
2+
3+
import com.duckduckgo.mobile.android.duckduckgo.ui.base.itemtouchhelper.ItemTouchHelperAdapter;
4+
5+
/**
6+
* Created by fgei on 6/23/17.
7+
*/
8+
9+
public interface BookmarksTouchHelperAdapter extends ItemTouchHelperAdapter {
10+
boolean isEditable();
11+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package com.duckduckgo.mobile.android.duckduckgo.ui.bookmarks.itemtouchhelper;
2+
3+
import com.duckduckgo.mobile.android.duckduckgo.ui.base.itemtouchhelper.ItemTouchHelperCallback;
4+
5+
/**
6+
* Created by fgei on 6/23/17.
7+
*/
8+
9+
public class BookmarksTouchHelperCallback extends ItemTouchHelperCallback<BookmarksTouchHelperAdapter> {
10+
public BookmarksTouchHelperCallback(BookmarksTouchHelperAdapter adapter) {
11+
super(adapter);
12+
}
13+
14+
@Override
15+
public boolean isItemMoveEnabled() {
16+
return true;
17+
}
18+
19+
@Override
20+
public boolean isItemViewSwipeEnabled() {
21+
return getAdapter().isEditable();
22+
}
23+
}

app/src/main/java/com/duckduckgo/mobile/android/duckduckgo/ui/browser/Browser.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,11 @@ private void pauseWebView(WebView webView) {
171171
private void destroyWebView(WebView webView) {
172172
if (webView == null) return;
173173
webView.stopLoading();
174-
webView.destroy();
174+
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
175+
webView.destroy();
176+
} else {
177+
webView = null;
178+
}
175179
}
176180

177181
@SuppressLint("SetJavaScriptEnabled")

app/src/main/java/com/duckduckgo/mobile/android/duckduckgo/ui/browser/BrowserPresenter.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.duckduckgo.mobile.android.duckduckgo.ui.browser;
22

3+
import android.graphics.Bitmap;
34
import android.support.annotation.NonNull;
45
import android.support.annotation.Nullable;
56

@@ -79,6 +80,8 @@ public interface BrowserPresenter {
7980

8081
void onReceiveTitle(@NonNull String tabId, @NonNull String title);
8182

83+
void onReceivedIcon(@NonNull String tabId, @NonNull Bitmap favicon);
84+
8285
void onPageStarted(@NonNull String tabId, @Nullable String url);
8386

8487
void onPageFinished(@NonNull String tabId, @Nullable String url);

app/src/main/java/com/duckduckgo/mobile/android/duckduckgo/ui/browser/BrowserPresenterImpl.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.duckduckgo.mobile.android.duckduckgo.ui.browser;
22

3+
import android.graphics.Bitmap;
34
import android.support.annotation.NonNull;
45
import android.support.annotation.Nullable;
56

@@ -368,10 +369,19 @@ public void onReceiveTitle(@NonNull String tabId, @NonNull String title) {
368369
}
369370
}
370371

372+
@Override
373+
public void onReceivedIcon(@NonNull String tabId, @NonNull Bitmap favicon) {
374+
TabEntity tab = getTabForId(tabId);
375+
if (tab != null) {
376+
tab.setFavicon(favicon);
377+
}
378+
}
379+
371380
@Override
372381
public void onPageStarted(@NonNull String tabId, @Nullable String url) {
373382
TabEntity tab = getTabForId(tabId);
374383
if (tab != null) {
384+
tab.setFavicon(null);
375385
tab.setCurrentUrl(url);
376386
}
377387
omnibarView.setRefreshEnabled(true);

app/src/main/java/com/duckduckgo/mobile/android/duckduckgo/ui/main/MainActivity.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,14 @@
66
import android.content.ClipboardManager;
77
import android.content.Context;
88
import android.content.Intent;
9+
import android.os.Build;
910
import android.os.Bundle;
11+
import android.support.annotation.ColorRes;
1012
import android.support.annotation.NonNull;
13+
import android.support.v4.content.ContextCompat;
1114
import android.support.v7.app.AppCompatActivity;
15+
import android.view.View;
16+
import android.view.WindowManager;
1217
import android.widget.Toast;
1318

1419
import com.duckduckgo.mobile.android.duckduckgo.Injector;
@@ -156,16 +161,28 @@ private void handleBookmarkResult(int resultCode, Intent data) {
156161
}
157162

158163
private void showTabSwitcher() {
164+
updateStatusBarColor(R.color.tab_switcher_background, true);
159165
TabSwitcherFragment fragment = TabSwitcherFragment.newInstance();
160166
getSupportFragmentManager().beginTransaction().add(ACTIVITY_CONTAINER, fragment, TabSwitcherFragment.TAG).commit();
161167
}
162168

163169
private void removeTabSwitcher() {
170+
updateStatusBarColor(R.color.colorPrimaryDark, false);
164171
TabSwitcherFragment fragment = (TabSwitcherFragment) getSupportFragmentManager().findFragmentByTag(TabSwitcherFragment.TAG);
165172
if (fragment == null) return;
166173
getSupportFragmentManager().beginTransaction().remove(fragment).commit();
167174
}
168175

176+
private void updateStatusBarColor(@ColorRes int color, boolean lightText) {
177+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
178+
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
179+
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
180+
getWindow().setStatusBarColor(ContextCompat.getColor(this, color));
181+
182+
getWindow().getDecorView().setSystemUiVisibility(lightText ? 0 : View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
183+
}
184+
}
185+
169186
private void copyTextToClipboard(@NonNull String label, @NonNull String text) {
170187
ClipboardManager clipboardManager = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
171188
ClipData clip = ClipData.newPlainText(label, text);

app/src/main/java/com/duckduckgo/mobile/android/duckduckgo/ui/tab/TabEntity.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.duckduckgo.mobile.android.duckduckgo.ui.tab;
22

3+
import android.graphics.Bitmap;
4+
35
import com.duckduckgo.mobile.android.duckduckgo.domain.tab.Tab;
46

57
import java.util.UUID;
@@ -15,6 +17,7 @@ public class TabEntity implements Tab {
1517
private String currentUrl = "";
1618
private boolean canGoBack = false;
1719
private boolean canGoForward = false;
20+
private Bitmap favicon;
1821

1922
private TabEntity() {
2023

@@ -78,4 +81,12 @@ public boolean canGoForward() {
7881
public void setCanGoForward(boolean canGoForward) {
7982
this.canGoForward = canGoForward;
8083
}
84+
85+
public Bitmap getFavicon() {
86+
return favicon;
87+
}
88+
89+
public void setFavicon(Bitmap favicon) {
90+
this.favicon = favicon;
91+
}
8192
}

app/src/main/java/com/duckduckgo/mobile/android/duckduckgo/ui/tab/web/DDGWebChromeClient.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.duckduckgo.mobile.android.duckduckgo.ui.tab.web;
22

3+
import android.graphics.Bitmap;
34
import android.support.annotation.NonNull;
45
import android.webkit.WebChromeClient;
56
import android.webkit.WebView;
@@ -31,4 +32,10 @@ public void onReceivedTitle(WebView view, String title) {
3132
super.onReceivedTitle(view, title);
3233
browserPresenter.onReceiveTitle(tabId, title);
3334
}
35+
36+
@Override
37+
public void onReceivedIcon(WebView view, Bitmap icon) {
38+
super.onReceivedIcon(view, icon);
39+
browserPresenter.onReceivedIcon(tabId, icon);
40+
}
3441
}

0 commit comments

Comments
 (0)
0