Skip to content

Commit

Permalink
[android] adding selected checkbox counter and event handlers. wip
Browse files Browse the repository at this point in the history
  • Loading branch information
gubatron committed Mar 11, 2016
1 parent 3453c60 commit bca4943
Show file tree
Hide file tree
Showing 8 changed files with 106 additions and 96 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -37,21 +37,26 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_weight="1.0">
android:layout_weight="1.0"
android:paddingTop="4px"
android:paddingBottom="4px">

<TextView
android:id="@+id/confirmation_dialog_multiple_selection_list_item_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:maxLines="1"
android:ellipsize="end"
android:layout_gravity="center_vertical|left" />
android:layout_gravity="left"
android:text="@string/dummy_title"/>

<TextView
android:id="@+id/confirmation_dialog_multiple_selection_list_item_size"
android:layout_gravity="center_vertical|right"
android:layout_gravity="left"
android:layout_width="50dp"
android:layout_height="wrap_content" />
android:layout_height="wrap_content"
android:textSize="@dimen/text_x_small"
android:text="@string/dummy_size"/>

</LinearLayout>

Expand Down
100 changes: 54 additions & 46 deletions android/res/layout/dialog_confirm_list.xml
Original file line number Diff line number Diff line change
Expand Up @@ -18,74 +18,82 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-->

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="0dp"
android:scrollbars="vertical" >

<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content">

<ImageView
android:id="@+id/dialog_confirm_list_title_icon"
android:layout_width="30dp"
android:layout_height="match_parent"
android:layout_gravity="left"
android:layout_margin="2dp"
android:src="@drawable/download_icon" />
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="0dp"
android:scrollbars="vertical">

<TextView
<TextView
android:id="@+id/dialog_confirm_list_text"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="5dp"
android:text="this is a parameter"
android:textSize="18sp"/>
</LinearLayout>

<CheckBox
android:id="@+id/dialog_confirm_list_select_all_checkbox"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:text="@string/select_all"
android:visibility="gone"
<View android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/basic_blue_highlight">
</View>

<LinearLayout android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingTop="2dp"
android:paddingBottom="2dp"
android:paddingRight="5dp">

<CheckBox
android:id="@+id/dialog_confirm_list_select_all_checkbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/select_all"
android:visibility="visible"
android:layout_weight="1.0"
android:gravity="left|center_vertical"
/>

<TextView android:id="@+id/dialog_confirm_list_selected_count_textview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="right|center_vertical"
android:text="56 selected"
android:textStyle="bold"/>
</LinearLayout>

<com.frostwire.android.gui.views.ListView
android:id="@+id/dialog_confirm_list_list"
android:layout_weight="1"
android:layout_width="match_parent"
android:layout_height="0dp"
android:background="@color/body_background_gray_light"
android:fastScrollEnabled="true" />
android:fastScrollEnabled="true"/>

<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">

<Button
android:id="@+id/dialog_confirm_list_button_yes"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:layout_weight="0.5"
android:minLines="1"
android:text="@android:string/yes"
android:textSize="15sp" />
android:orientation="horizontal">

<Button
android:id="@+id/dialog_confirm_list_button_no"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:layout_weight="0.5"
android:minLines="1"
android:text="@android:string/no"
android:textSize="15sp" />
android:id="@+id/dialog_confirm_list_button_yes"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:layout_weight="0.5"
android:minLines="1"
android:text="@android:string/yes"
android:textSize="15sp"/>

<Button
android:id="@+id/dialog_confirm_list_button_no"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:layout_weight="0.5"
android:minLines="1"
android:text="@android:string/no"
android:textSize="15sp"/>
</LinearLayout>
</LinearLayout>
1 change: 1 addition & 0 deletions android/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -582,4 +582,5 @@
<string name="storage_path">Storage Path</string>
<string name="learn_more">Learn more</string>
<string name="enable_experimental">Experimental Features</string>
<string name="selected">selected</string>
</resources>
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
Expand Down Expand Up @@ -72,9 +73,10 @@ public enum SelectionMode {
private String title;
private String dialogText;
private final SelectionMode selectionMode;
private Dialog dlg;
private OnCancelListener onCancelListener;
private OnClickListener onYesListener;
private ConfirmListDialogDefaultAdapter<T> customAdapter;
//private ConfirmListDialogDefaultAdapter<T> customAdapter;
private ConfirmListDialogDefaultAdapter<T> adapter;

abstract protected OnClickListener createOnYesListener(AbstractConfirmListDialog dlg);
Expand All @@ -86,7 +88,6 @@ public AbstractConfirmListDialog(SelectionMode selectionMode,
ConfirmListDialogDefaultAdapter customAdapter) {
super(TAG, R.layout.dialog_confirm_list);
this.selectionMode = selectionMode;
this.customAdapter = customAdapter;
this.adapter = customAdapter;
}

Expand All @@ -98,67 +99,66 @@ public SelectionMode getSelectionMode() {
return selectionMode;
}

protected void prepareArguments(String dialogTitle,
protected void prepareArguments(int dialogIcon,
String dialogTitle,
String dialogText,
String listDataInJSON,
SelectionMode selectionMode) {
Bundle bundle = new Bundle();
bundle.putInt("dialogIcon", dialogIcon);
bundle.putString("title", dialogTitle);
bundle.putString("dialogText", dialogText);
bundle.putString("listData", listDataInJSON);
bundle.putInt("selectionMode", selectionMode.ordinal());
setArguments(bundle);
}

protected void prepareArguments(String dialogTitle, String dialogText, String listDataInJSON){
prepareArguments(dialogTitle, dialogText, listDataInJSON, selectionMode);
protected void prepareArguments(int dialogIcon, String dialogTitle, String dialogText, String listDataInJSON){
prepareArguments(dialogIcon, dialogTitle, dialogText, listDataInJSON, selectionMode);
}

@Override
protected void initComponents(Dialog dlg, Bundle savedInstanceState) {
//TODO: Make sure the adapter
//will know what items have been selected and that we can
//reinit the right checkboxes selected here when orientation change occurs.

this.dlg = dlg;
Bundle bundle = getArguments();
int dialogIcon = bundle.getInt("dialogIcon", -1);
if (dialogIcon > 0) {
dlg.setFeatureDrawableResource(Window.FEATURE_LEFT_ICON, dialogIcon);
}

title = bundle.getString("title");
dlg.setTitle(title);

dialogText = bundle.getString("dialogText");
TextView textView = findView(dlg, R.id.dialog_confirm_list_text);
textView.setText(dialogText);

dialogText = bundle.getString("dialogText");
TextView confirmTextView = findView(dlg, R.id.dialog_confirm_list_text);
confirmTextView.setText(dialogText);

if (selectionMode == SelectionMode.MULTIPLE_SELECTION) {
CheckBox checkBox = findView(dlg, R.id.dialog_confirm_list_select_all_checkbox);
checkBox.setVisibility(View.VISIBLE);
checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
CheckBox selectAllCheckbox = findView(dlg, R.id.dialog_confirm_list_select_all_checkbox);
selectAllCheckbox.setVisibility(View.VISIBLE);
selectAllCheckbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (buttonView.isChecked()) {
adapter.checkAll();
} else {
adapter.clearChecked();
}
updateSelectedCount();
}
});
}

ListView listView = findView(dlg, R.id.dialog_confirm_list_list);
String listDataString = bundle.getString("listData");
List<T> listData = deserializeData(listDataString);

if (customAdapter != null) {
customAdapter.addList(listData);
adapter = customAdapter;
if (adapter != null) {
adapter.addList(listData);
} else {
adapter = new ConfirmListDialogDefaultAdapter<>(getActivity(),
listData,
selectionMode);
}

listView.setAdapter(adapter);

final Dialog dialog = dlg;
Button noButton = findView(dialog, R.id.dialog_confirm_list_button_no);
noButton.setOnClickListener(new OnClickListener() {
Expand All @@ -170,13 +170,10 @@ public void onClick(View v) {
dialog.dismiss();
}
});

if (onCancelListener != null){
dialog.setOnCancelListener(onCancelListener);
}

onYesListener = createOnYesListener(this);

if (onYesListener != null) {
Button yesButton = findView(dialog, R.id.dialog_confirm_list_button_yes);
yesButton.setOnClickListener(onYesListener);
Expand Down Expand Up @@ -238,4 +235,17 @@ public boolean[] getSelected() {
public int getLastSelected(){
return adapter.getLastSelectedRadioButtonIndex();
}

public void updateSelectedCount() {
final Set checked = adapter.getChecked();
int selected = 0;
if (checked != null && !checked.isEmpty()) {
selected = checked.size();
}
final TextView selectedCountTextView = findView(dlg, R.id.dialog_confirm_list_selected_count_textview);
if (selectedCountTextView != null) {
selectedCountTextView.setText(selected + " " + getString(R.string.selected));
selectedCountTextView.setVisibility(selected > 0 ? View.VISIBLE : View.GONE);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,6 @@
*/
public class ConfirmListDialogDefaultAdapter<T extends SearchResult> extends AbstractListAdapter {
private static final Logger LOGGER = Logger.getLogger(ConfirmListDialogDefaultAdapter.class);
private boolean radioButtonVisibility;
private static final int ITEM_TITLE = 0;
private static final int ITEM_SIZE = 1;
private static final int ITEM_ART = 2;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -177,7 +177,7 @@ public static ConfirmSoundcloudDownloadDialog newInstance(String dialogTitle,
ConfirmSoundcloudDownloadDialog dlg = new ConfirmSoundcloudDownloadDialog(SelectionMode.SINGLE_SELECTION); //TODO: Set this back to MULTIPLE SELECTION
SoundcloudSearchResultList srList = new SoundcloudSearchResultList();
srList.listData = listData;
dlg.prepareArguments(dialogTitle, dialogText, JsonUtils.toJson(srList));
dlg.prepareArguments(R.drawable.download_icon, dialogTitle, dialogText, JsonUtils.toJson(srList));
return dlg;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager.LayoutParams;

import com.frostwire.util.Ref;
Expand All @@ -54,7 +55,7 @@ public abstract class AbstractDialog extends DialogFragment {
public static final int BUTTON_NEGATIVE = Dialog.BUTTON_NEGATIVE;

private final String tag;
private final int layoutResId;
protected final int layoutResId;

private WeakReference<Activity> activityRef;

Expand All @@ -73,10 +74,9 @@ public void onAttach(Activity activity) {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
Dialog dlg = super.onCreateDialog(savedInstanceState);

dlg.requestWindowFeature(Window.FEATURE_LEFT_ICON);
setContentView(dlg, layoutResId);
initComponents(dlg, savedInstanceState);

return dlg;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,25 +27,14 @@
import android.view.View.OnKeyListener;
import android.view.View.OnLongClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.*;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.Filter;
import android.widget.Filterable;
import android.widget.LinearLayout;
import android.widget.RadioButton;

import com.frostwire.android.R;
import com.frostwire.logging.Logger;
import com.frostwire.util.Ref;

import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.*;

/**
* We extend from ListAdapter to populate our ListViews.
Expand Down Expand Up @@ -422,9 +411,7 @@ protected Dialog trackDialog(Dialog dialog) {
* @see #getChecked()
*/
protected void initCheckBox(View view, T item) {

CheckBox checkbox = findView(view, R.id.view_selectable_list_item_checkbox);

if (checkbox != null) {
checkbox.setVisibility((checkboxesVisibility) ? View.VISIBLE : View.GONE);

Expand Down

0 comments on commit bca4943

Please sign in to comment.