Split tabs layouts
Use separate layouts for the three tabs. This simplifies code and improves maintainability.
This commit is contained in:
parent
950854318b
commit
7fdcd706fd
@ -2,8 +2,7 @@
|
|||||||
<RelativeLayout
|
<RelativeLayout
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent">
|
||||||
android:orientation="vertical">
|
|
||||||
|
|
||||||
<Spinner
|
<Spinner
|
||||||
android:id="@+id/category_spinner"
|
android:id="@+id/category_spinner"
|
||||||
@ -19,21 +18,12 @@
|
|||||||
android:layout_alignBottom="@id/category_spinner"
|
android:layout_alignBottom="@id/category_spinner"
|
||||||
android:background="@color/fdroid_green" />
|
android:background="@color/fdroid_green" />
|
||||||
|
|
||||||
<!-- The empty app list message gets shown on the parent of the @android:id/list.
|
|
||||||
For the update/installed lists, this is not a problem as it is attached to the linear
|
|
||||||
layout the list is in. However here, it will end up in the relative layout which
|
|
||||||
causes sadness. This FrameLayout is here so that the empty message will get shown here. -->
|
|
||||||
<FrameLayout
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:layout_below="@id/category_spinner">
|
|
||||||
|
|
||||||
<ListView
|
<ListView
|
||||||
android:id="@android:id/list"
|
style="@style/AppList"
|
||||||
android:fastScrollEnabled="true"
|
android:layout_below="@id/category_spinner" />
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent" />
|
|
||||||
|
|
||||||
</FrameLayout>
|
<TextView
|
||||||
|
style="@style/AppListEmptyText"
|
||||||
|
android:text="@string/empty_available_app_list" />
|
||||||
|
|
||||||
</RelativeLayout>
|
</RelativeLayout>
|
||||||
|
14
F-Droid/res/layout/can_update_app_list.xml
Normal file
14
F-Droid/res/layout/can_update_app_list.xml
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<RelativeLayout
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
|
<ListView
|
||||||
|
style="@style/AppList" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
style="@style/AppListEmptyText"
|
||||||
|
android:text="@string/empty_can_update_app_list" />
|
||||||
|
|
||||||
|
</RelativeLayout>
|
@ -1,19 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
|
||||||
android:orientation="vertical"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:padding="20dp"
|
|
||||||
android:gravity="center_vertical">
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/text"
|
|
||||||
android:layout_gravity="center_horizontal"
|
|
||||||
android:textAlignment="center"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:textSize="20sp"
|
|
||||||
tools:text="No apps in this category.\n\nTry selecting a different category or updating your repositories to get a fresh list of apps." />
|
|
||||||
|
|
||||||
</LinearLayout>
|
|
14
F-Droid/res/layout/installed_app_list.xml
Normal file
14
F-Droid/res/layout/installed_app_list.xml
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<RelativeLayout
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
|
<ListView
|
||||||
|
style="@style/AppList" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
style="@style/AppListEmptyText"
|
||||||
|
android:text="@string/empty_installed_app_list" />
|
||||||
|
|
||||||
|
</RelativeLayout>
|
@ -6,19 +6,15 @@ import android.content.SharedPreferences;
|
|||||||
import android.database.Cursor;
|
import android.database.Cursor;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.support.annotation.Nullable;
|
|
||||||
import android.support.v4.app.ListFragment;
|
import android.support.v4.app.ListFragment;
|
||||||
import android.support.v4.app.LoaderManager;
|
import android.support.v4.app.LoaderManager;
|
||||||
import android.support.v4.content.CursorLoader;
|
import android.support.v4.content.CursorLoader;
|
||||||
import android.support.v4.content.Loader;
|
import android.support.v4.content.Loader;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
|
||||||
import android.widget.AdapterView;
|
import android.widget.AdapterView;
|
||||||
import android.widget.TextView;
|
|
||||||
|
|
||||||
import org.fdroid.fdroid.AppDetails;
|
import org.fdroid.fdroid.AppDetails;
|
||||||
import org.fdroid.fdroid.Preferences;
|
import org.fdroid.fdroid.Preferences;
|
||||||
import org.fdroid.fdroid.R;
|
|
||||||
import org.fdroid.fdroid.UpdateService;
|
import org.fdroid.fdroid.UpdateService;
|
||||||
import org.fdroid.fdroid.Utils;
|
import org.fdroid.fdroid.Utils;
|
||||||
import org.fdroid.fdroid.data.App;
|
import org.fdroid.fdroid.data.App;
|
||||||
@ -62,17 +58,6 @@ public abstract class AppListFragment extends ListFragment implements
|
|||||||
|
|
||||||
protected abstract Uri getDataUri();
|
protected abstract Uri getDataUri();
|
||||||
|
|
||||||
/**
|
|
||||||
* Depending on the subclass, a different message may be desired. For example, in the main list
|
|
||||||
* of apps, might want to say "No apps for this category, how about you try...", while the
|
|
||||||
* "Update" tab may wish to say "Congratulations, all your apps are up to date."
|
|
||||||
*
|
|
||||||
* In the future, this may want to return a view instead of a string. That would allow nice
|
|
||||||
* visual graphics helping to show the message.
|
|
||||||
*/
|
|
||||||
@Nullable
|
|
||||||
protected abstract String getEmptyMessage();
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onActivityCreated(Bundle savedInstanceState) {
|
public void onActivityCreated(Bundle savedInstanceState) {
|
||||||
super.onActivityCreated(savedInstanceState);
|
super.onActivityCreated(savedInstanceState);
|
||||||
@ -80,16 +65,7 @@ public abstract class AppListFragment extends ListFragment implements
|
|||||||
// Can't do this in the onCreate view, because "onCreateView" which
|
// Can't do this in the onCreate view, because "onCreateView" which
|
||||||
// returns the list view is "called between onCreate and
|
// returns the list view is "called between onCreate and
|
||||||
// onActivityCreated" according to the docs.
|
// onActivityCreated" according to the docs.
|
||||||
getListView().setFastScrollEnabled(true);
|
|
||||||
getListView().setOnItemClickListener(this);
|
getListView().setOnItemClickListener(this);
|
||||||
|
|
||||||
String emptyMessage = getEmptyMessage();
|
|
||||||
if (emptyMessage != null) {
|
|
||||||
View emptyView = getLayoutInflater(savedInstanceState).inflate(R.layout.empty_app_list, null);
|
|
||||||
((TextView) emptyView.findViewById(R.id.text)).setText(emptyMessage);
|
|
||||||
((ViewGroup) getListView().getParent()).addView(emptyView); // Needs to be added to this parent or it doesn't show.
|
|
||||||
getListView().setEmptyView(emptyView);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -14,7 +14,6 @@ import android.view.View;
|
|||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.AdapterView;
|
import android.widget.AdapterView;
|
||||||
import android.widget.ArrayAdapter;
|
import android.widget.ArrayAdapter;
|
||||||
import android.widget.ListView;
|
|
||||||
import android.widget.Spinner;
|
import android.widget.Spinner;
|
||||||
|
|
||||||
import org.fdroid.fdroid.Preferences;
|
import org.fdroid.fdroid.Preferences;
|
||||||
@ -62,11 +61,6 @@ public class AvailableAppsFragment extends AppListFragment implements
|
|||||||
return adapter;
|
return adapter;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
protected String getEmptyMessage() {
|
|
||||||
return getActivity().getString(R.string.empty_available_app_list);
|
|
||||||
}
|
|
||||||
|
|
||||||
private class CategoryObserver extends ContentObserver {
|
private class CategoryObserver extends ContentObserver {
|
||||||
|
|
||||||
private final ArrayAdapter<String> adapter;
|
private final ArrayAdapter<String> adapter;
|
||||||
@ -154,9 +148,6 @@ public class AvailableAppsFragment extends AppListFragment implements
|
|||||||
View view = inflater.inflate(R.layout.available_app_list, container, false);
|
View view = inflater.inflate(R.layout.available_app_list, container, false);
|
||||||
|
|
||||||
setupCategorySpinner((Spinner) view.findViewById(R.id.category_spinner));
|
setupCategorySpinner((Spinner) view.findViewById(R.id.category_spinner));
|
||||||
|
|
||||||
((ListView) view.findViewById(android.R.id.list)).setOnItemClickListener(this);
|
|
||||||
|
|
||||||
defaultCategory = AppProvider.Helper.getCategoryWhatsNew(getActivity());
|
defaultCategory = AppProvider.Helper.getCategoryWhatsNew(getActivity());
|
||||||
|
|
||||||
return view;
|
return view;
|
||||||
|
@ -1,6 +1,10 @@
|
|||||||
package org.fdroid.fdroid.views.fragments;
|
package org.fdroid.fdroid.views.fragments;
|
||||||
|
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.view.LayoutInflater;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
|
||||||
import org.fdroid.fdroid.R;
|
import org.fdroid.fdroid.R;
|
||||||
import org.fdroid.fdroid.data.AppProvider;
|
import org.fdroid.fdroid.data.AppProvider;
|
||||||
@ -19,14 +23,14 @@ public class CanUpdateAppsFragment extends AppListFragment {
|
|||||||
return getString(R.string.tab_updates);
|
return getString(R.string.tab_updates);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
protected String getEmptyMessage() {
|
|
||||||
return getActivity().getString(R.string.empty_can_update_app_list);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Uri getDataUri() {
|
protected Uri getDataUri() {
|
||||||
return AppProvider.getCanUpdateUri();
|
return AppProvider.getCanUpdateUri();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||||
|
return inflater.inflate(R.layout.can_update_app_list, container, false);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,10 @@
|
|||||||
package org.fdroid.fdroid.views.fragments;
|
package org.fdroid.fdroid.views.fragments;
|
||||||
|
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.view.LayoutInflater;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
|
||||||
import org.fdroid.fdroid.R;
|
import org.fdroid.fdroid.R;
|
||||||
import org.fdroid.fdroid.data.AppProvider;
|
import org.fdroid.fdroid.data.AppProvider;
|
||||||
@ -14,11 +18,6 @@ public class InstalledAppsFragment extends AppListFragment {
|
|||||||
return new InstalledAppListAdapter(getActivity(), null);
|
return new InstalledAppListAdapter(getActivity(), null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
protected String getEmptyMessage() {
|
|
||||||
return getActivity().getString(R.string.empty_installed_app_list);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected String getFromTitle() {
|
protected String getFromTitle() {
|
||||||
return getString(R.string.tab_installed_apps);
|
return getString(R.string.tab_installed_apps);
|
||||||
@ -29,4 +28,9 @@ public class InstalledAppsFragment extends AppListFragment {
|
|||||||
return AppProvider.getInstalledUri();
|
return AppProvider.getInstalledUri();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||||
|
return inflater.inflate(R.layout.installed_app_list, container, false);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user