Skip to content

Commit

Permalink
Moved the settings to the end
Browse files Browse the repository at this point in the history
Added gear icon for the settings and text for others
  • Loading branch information
octacode committed Jul 7, 2017
1 parent 35ccb24 commit f460066
Show file tree
Hide file tree
Showing 3 changed files with 111 additions and 9 deletions.
35 changes: 26 additions & 9 deletions src/main/java/org/amahi/anywhere/tv/fragment/MainTVFragment.java
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
import android.support.v17.leanback.widget.ListRowPresenter;
import android.support.v17.leanback.widget.OnItemViewSelectedListener;
import android.support.v17.leanback.widget.Presenter;
import android.support.v17.leanback.widget.PresenterSelector;
import android.support.v17.leanback.widget.Row;
import android.support.v17.leanback.widget.RowPresenter;
import android.util.DisplayMetrics;
Expand All @@ -53,6 +54,7 @@
import org.amahi.anywhere.server.model.Server;
import org.amahi.anywhere.server.model.ServerFile;
import org.amahi.anywhere.server.model.ServerShare;
import org.amahi.anywhere.tv.presenter.IconHeaderPresenter;
import org.amahi.anywhere.tv.presenter.MainTVPresenter;
import org.amahi.anywhere.tv.presenter.SettingsItemPresenter;
import org.amahi.anywhere.util.Intents;
Expand All @@ -74,6 +76,7 @@ public class MainTVFragment extends BrowseFragment {
private ArrayObjectAdapter mRowsAdapter;
private BackgroundManager mBackgroundManager;
private DisplayMetrics mMetrics;
private ListRow settingsRow;

@Override
public void onActivityCreated(Bundle savedInstanceState) {
Expand Down Expand Up @@ -109,17 +112,27 @@ private void setupUIElements() {

setHeadersState(HEADERS_ENABLED);

setHeaderPresenter();

setHeadersTransitionOnBackEnabled(true);

setBrandColor(Color.parseColor("#0277bd"));

setSearchAffordanceColor(Color.GREEN);
}

private void setHeaderPresenter() {
setHeaderPresenterSelector(new PresenterSelector() {
@Override
public Presenter getPresenter(Object item) {
return new IconHeaderPresenter();
}
});
}

private void loadRows() {
mRowsAdapter = new ArrayObjectAdapter(new ListRowPresenter());
addSettings(mRowsAdapter);
addSeparator(mRowsAdapter);
}

private void loadShares() {
Expand Down Expand Up @@ -188,6 +201,7 @@ public void onSharesLoaded(ServerSharesLoadedEvent event) {
@Subscribe
public void onFilesLoaded(ServerFilesLoadedEvent event) {
List<ServerFile> serverFiles = sortFiles(event.getServerFiles());
ListRow listRow = null;
ArrayObjectAdapter gridRowAdapter = new ArrayObjectAdapter(new MainTVPresenter(getActivity(), serverClient, serverFiles));
if (serverFiles.size() != 0) {
String shareName = serverFiles.get(0).getParentShare().getName();
Expand All @@ -197,20 +211,22 @@ public void onFilesLoaded(ServerFilesLoadedEvent event) {
for (int i = 0; i < serverShareList.size(); i++) {
if (shareName.matches(serverShareList.get(i).getName())) {
HeaderItem headerItem = new HeaderItem(shareName);
mRowsAdapter.add(new ListRow(headerItem, gridRowAdapter));
listRow = new ListRow(headerItem, gridRowAdapter);
mRowsAdapter.add(listRow);
serverShareList.remove(i);
break;
}
}
}
if (listRow != null) {
int index1 = mRowsAdapter.indexOf(listRow);
int index2 = mRowsAdapter.indexOf(settingsRow);
mRowsAdapter.replace(index1, settingsRow);
mRowsAdapter.replace(index2, listRow);
}
setAdapter(mRowsAdapter);
}

private void addSeparator(ArrayObjectAdapter adapter) {
HeaderItem separator = new HeaderItem("-------------------------");
adapter.add(new ListRow(separator, new ArrayObjectAdapter(new SettingsItemPresenter())));
setAdapter(adapter);
}

private void addSettings(ArrayObjectAdapter adapter) {
ArrayObjectAdapter gridRowAdapter;

Expand All @@ -221,7 +237,8 @@ private void addSettings(ArrayObjectAdapter adapter) {
gridRowAdapter.add(getString(R.string.pref_title_sign_out));
gridRowAdapter.add(getString(R.string.pref_title_connection));
gridRowAdapter.add(getString(R.string.pref_title_select_theme));
adapter.add(new ListRow(settings, gridRowAdapter));
settingsRow = new ListRow(settings, gridRowAdapter);
adapter.add(0, settingsRow);
}

private List<ServerFile> sortFiles(List<ServerFile> files) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
package org.amahi.anywhere.tv.presenter;

import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.support.v17.leanback.widget.HeaderItem;
import android.support.v17.leanback.widget.ListRow;
import android.support.v17.leanback.widget.Presenter;
import android.support.v17.leanback.widget.RowHeaderPresenter;
import android.support.v4.content.ContextCompat;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import org.amahi.anywhere.R;

public class IconHeaderPresenter extends RowHeaderPresenter {

private float mUnselectedAlpha;

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent) {
mUnselectedAlpha = parent.getResources()
.getFraction(R.fraction.lb_browse_header_unselect_alpha, 1, 1);

LayoutInflater inflater = (LayoutInflater) parent.getContext()
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

View view = inflater.inflate(R.layout.tv_header_item, null);
view.setAlpha(mUnselectedAlpha);
return new ViewHolder(view);
}

@Override
public void onBindViewHolder(Presenter.ViewHolder viewHolder, Object item) {
HeaderItem headerItem = ((ListRow) item).getHeaderItem();
View rootView = viewHolder.view;
rootView.setFocusable(true);
ImageView imageView = (ImageView) rootView.findViewById(R.id.header_icon);

if (headerItem.getName().matches("Settings")) {
imageView.setVisibility(View.VISIBLE);
Drawable icon = ContextCompat.getDrawable(rootView.getContext(), R.drawable.ic_menu_settings);
imageView.setImageDrawable(icon);
} else {
imageView.setVisibility(View.GONE);
TextView label = (TextView) rootView.findViewById(R.id.header_label);
label.setTextColor(Color.WHITE);
label.setText(headerItem.getName());
}
}

@Override
public void onUnbindViewHolder(Presenter.ViewHolder viewHolder) {
// Nothing to be done here.
}

@Override
protected void onSelectLevelChanged(RowHeaderPresenter.ViewHolder holder) {
holder.view.setAlpha(mUnselectedAlpha + holder.getSelectLevel() *
(1.0f - mUnselectedAlpha));
}
}
20 changes: 20 additions & 0 deletions src/main/res/layout/tv_header_item.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent">

<ImageView
android:id="@+id/header_icon"
android:layout_width="32dp"
android:layout_height="32dp"
android:visibility="gone"
android:src="@drawable/ic_menu_settings"/>
<TextView
android:id="@+id/header_label"
android:layout_marginTop="6dp"
android:textSize="18sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />

</LinearLayout>

0 comments on commit f460066

Please sign in to comment.