Skip to content

Commit 2aa093c

Browse files
committed
Change base currency by click it.
1 parent 344cea1 commit 2aa093c

17 files changed

Lines changed: 440 additions & 151 deletions

.idea/misc.xml

Lines changed: 0 additions & 16 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/proguard-rules.pro

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,5 @@
1919
-keepclassmembers class ** {
2020
@org.greenrobot.eventbus.Subscribe <methods>;
2121
}
22-
-keep enum org.greenrobot.eventbus.ThreadMode { *; }
22+
-keep enum org.greenrobot.eventbus.ThreadMode { *; }
23+
-keep class com.github.mikephil.charting.** { *; }

app/src/main/AndroidManifest.xml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,10 @@
2222
</activity>
2323
<activity
2424
android:name=".tab.rate.AddCurrencyActivity"
25-
android:label="@string/add_currency_activity_name"
26-
android:screenOrientation="portrait"/>
25+
android:label="@string/add_currency_activity_name"/>
26+
<activity
27+
android:name=".tab.rate.ChangeBaseCurrencyActivity"
28+
android:label="@string/change_base_currency_activity_name"/>
2729
</application>
2830

2931
</manifest>

app/src/main/java/org/mushare/rate/data/CurrencyShowList.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,13 @@ public synchronized static String getBaseCurrencyCid() {
2020
return currencyShowList.isEmpty() ? null : currencyShowList.get(0);
2121
}
2222

23+
public synchronized static void setBaseCurrencyCid(String cid) {
24+
int index;
25+
if ((index = currencyShowList.indexOf(cid)) == -1) currencyShowList.set(0, cid);
26+
else Collections.swap(currencyShowList, 0, index);
27+
isChanged = true;
28+
}
29+
2330
public synchronized static MyCurrency getBaseCurrency() {
2431
String cid = getBaseCurrencyCid();
2532
return cid == null ? null : CurrencyList.get(cid);
@@ -91,6 +98,25 @@ public synchronized static List<MyCurrencyWrapper> getInvisibleCurrencyCidList()
9198
return list;
9299
}
93100

101+
public synchronized static List<MyCurrencyWrapper> getAvailableBaseCurrencyCidList() {
102+
List<String> cidList = new LinkedList<>(CurrencyList.getCidSet());
103+
cidList.remove(getBaseCurrencyCid());
104+
List<MyCurrencyWrapper> list = new LinkedList<>();
105+
for (String cid : cidList) {
106+
list.add(new MyCurrencyWrapper(cid, CurrencyList.get(cid)));
107+
}
108+
Collections.sort(list);
109+
char character = '-';
110+
for (MyCurrencyWrapper myCurrencyWrapper : list) {
111+
char c = myCurrencyWrapper.getCurrency().getCode().charAt(0);
112+
if (c != character) {
113+
myCurrencyWrapper.setCharacter(c);
114+
character = c;
115+
}
116+
}
117+
return list;
118+
}
119+
94120
public synchronized static void cache(SQLiteDatabase db) {
95121
if (!isChanged) return;
96122
db.execSQL("delete from show_currencies");

app/src/main/java/org/mushare/rate/tab/rate/AddCurrencyRecyclerViewAdapter.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,20 +20,20 @@
2020
* Created by dklap on 3/9/2017.
2121
*/
2222

23-
public class AddCurrencyRecyclerViewAdapter extends RecyclerView
23+
class AddCurrencyRecyclerViewAdapter extends RecyclerView
2424
.Adapter<AddCurrencyRecyclerViewAdapter.ViewHolder> {
2525
private List<MyCurrencyWrapper> mDataset;
2626
private ArrayList<String> mSelected = new ArrayList<>();
2727

28-
public AddCurrencyRecyclerViewAdapter(List<MyCurrencyWrapper> dataset) {
29-
this.mDataset = dataset;
28+
AddCurrencyRecyclerViewAdapter(List<MyCurrencyWrapper> dataset) {
29+
mDataset = dataset;
3030
}
3131

32-
public ArrayList<String> getSelected() {
32+
ArrayList<String> getSelected() {
3333
return mSelected;
3434
}
3535

36-
public void setSelected(ArrayList<String> selected) {
36+
void setSelected(ArrayList<String> selected) {
3737
mSelected = selected;
3838
}
3939

app/src/main/java/org/mushare/rate/tab/rate/BaseCurrencyEditText.java

Lines changed: 44 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,22 +3,54 @@
33
import android.content.Context;
44
import android.support.v7.widget.AppCompatEditText;
55
import android.util.AttributeSet;
6+
import android.view.KeyEvent;
7+
import android.view.MotionEvent;
8+
import android.view.View;
9+
import android.view.inputmethod.EditorInfo;
10+
import android.view.inputmethod.InputMethodManager;
11+
import android.widget.EditText;
12+
import android.widget.TextView;
613

714
/**
815
* Created by dklap on 1/9/2017.
916
*/
1017

1118
public class BaseCurrencyEditText extends AppCompatEditText {
1219
public BaseCurrencyEditText(Context context) {
13-
super(context);
20+
this(context, null);
1421
}
1522

1623
public BaseCurrencyEditText(Context context, AttributeSet attrs) {
17-
super(context, attrs);
24+
this(context, attrs, android.support.v7.appcompat.R.attr.editTextStyle);
1825
}
1926

20-
public BaseCurrencyEditText(Context context, AttributeSet attrs, int defStyleAttr) {
27+
public BaseCurrencyEditText(final Context context, AttributeSet attrs, int defStyleAttr) {
2128
super(context, attrs, defStyleAttr);
29+
setOnEditorActionListener(new EditText.OnEditorActionListener() {
30+
@Override
31+
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
32+
if (actionId == EditorInfo.IME_ACTION_DONE) {
33+
clearFocus();
34+
return true;
35+
}
36+
return false;
37+
}
38+
});
39+
setOnFocusChangeListener(new View.OnFocusChangeListener() {
40+
@Override
41+
public void onFocusChange(View v, boolean hasFocus) {
42+
if (!hasFocus) {
43+
InputMethodManager keyboard = (InputMethodManager) context
44+
.getSystemService(Context.INPUT_METHOD_SERVICE);
45+
keyboard.hideSoftInputFromWindow(getWindowToken(), 0);
46+
} else {
47+
InputMethodManager keyboard = (InputMethodManager) context
48+
.getSystemService(Context.INPUT_METHOD_SERVICE);
49+
keyboard.showSoftInput(BaseCurrencyEditText.this, InputMethodManager
50+
.SHOW_FORCED);
51+
}
52+
}
53+
});
2254
}
2355

2456
@Override
@@ -32,4 +64,13 @@ protected void onSelectionChanged(int selStart, int selEnd) {
3264
}
3365
super.onSelectionChanged(selStart, selEnd);
3466
}
67+
68+
@Override
69+
public boolean onTouchEvent(MotionEvent event) {
70+
if (event.getAction() == MotionEvent.ACTION_UP) {
71+
if (isFocused()) clearFocus();
72+
else requestFocus();
73+
}
74+
return true;
75+
}
3576
}
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package org.mushare.rate.tab.rate;
2+
3+
import android.content.Intent;
4+
import android.os.Bundle;
5+
import android.support.annotation.Nullable;
6+
import android.support.v7.app.AppCompatActivity;
7+
import android.support.v7.widget.LinearLayoutManager;
8+
import android.support.v7.widget.RecyclerView;
9+
10+
import org.mushare.rate.R;
11+
import org.mushare.rate.data.CurrencyShowList;
12+
13+
/**
14+
* Created by dklap on 3/9/2017.
15+
*/
16+
17+
public class ChangeBaseCurrencyActivity extends AppCompatActivity implements
18+
ChangeBaseCurrencyRecyclerViewAdapter.Callback {
19+
RecyclerView recyclerView;
20+
ChangeBaseCurrencyRecyclerViewAdapter adapter;
21+
22+
@Override
23+
protected void onCreate(@Nullable Bundle savedInstanceState) {
24+
super.onCreate(savedInstanceState);
25+
setContentView(R.layout.activity_add_currency);
26+
27+
// ActionBar actionBar = getSupportActionBar();
28+
// if (actionBar != null) actionBar.setDisplayHomeAsUpEnabled(true);
29+
30+
recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
31+
32+
// use this setting to improve performance if you know that changes
33+
// in content do not change the layout size of the RecyclerView
34+
recyclerView.setHasFixedSize(true);
35+
36+
// use a linear layout manager
37+
RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(this);
38+
recyclerView.setLayoutManager(layoutManager);
39+
// specify an adapter (see also next example)
40+
adapter = new ChangeBaseCurrencyRecyclerViewAdapter(CurrencyShowList
41+
.getAvailableBaseCurrencyCidList(), this);
42+
recyclerView.setAdapter(adapter);
43+
}
44+
45+
@Override
46+
public void onBaseCurrencySelected(String cid) {
47+
Intent data = new Intent();
48+
data.putExtra("base_currency", cid);
49+
setResult(RESULT_OK, data);
50+
finish();
51+
}
52+
}
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
package org.mushare.rate.tab.rate;
2+
3+
import android.support.v7.widget.RecyclerView;
4+
import android.view.LayoutInflater;
5+
import android.view.View;
6+
import android.view.ViewGroup;
7+
import android.widget.ImageView;
8+
import android.widget.TextView;
9+
10+
import org.mushare.rate.R;
11+
import org.mushare.rate.data.MyCurrency;
12+
import org.mushare.rate.data.MyCurrencyWrapper;
13+
14+
import java.util.List;
15+
16+
/**
17+
* Created by dklap on 3/9/2017.
18+
*/
19+
20+
class ChangeBaseCurrencyRecyclerViewAdapter extends RecyclerView
21+
.Adapter<ChangeBaseCurrencyRecyclerViewAdapter.ViewHolder> {
22+
private List<MyCurrencyWrapper> mDataset;
23+
private Callback mCallback;
24+
25+
ChangeBaseCurrencyRecyclerViewAdapter(List<MyCurrencyWrapper> dataset, Callback
26+
callback) {
27+
mDataset = dataset;
28+
mCallback = callback;
29+
}
30+
31+
@Override
32+
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
33+
return new ViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout
34+
.list_item_base_currency_change, parent, false));
35+
}
36+
37+
@Override
38+
public void onBindViewHolder(ViewHolder holder, int position) {
39+
final MyCurrencyWrapper myCurrencyWrapper = mDataset.get(position);
40+
// Currency currency = Currency.getInstance(myCurrency.getCode());
41+
holder.textViewAlphabet.setText(String.valueOf(myCurrencyWrapper.getCharacter()));
42+
MyCurrency myCurrency = myCurrencyWrapper.getCurrency();
43+
holder.textViewCurrencyCode.setText(myCurrency.getCode());
44+
holder.textViewCurrencyName.setText(myCurrency.getName());
45+
int resID = holder.imageViewCountryFlag.getContext().getResources().getIdentifier
46+
("ic_flag_" + myCurrency.getIcon(), "drawable", holder.imageViewCountryFlag
47+
.getContext().getPackageName());
48+
if (resID != 0) {
49+
holder.imageViewCountryFlag.setImageResource(resID);
50+
}
51+
holder.itemView.setOnClickListener(new View.OnClickListener() {
52+
@Override
53+
public void onClick(View v) {
54+
mCallback.onBaseCurrencySelected(myCurrencyWrapper.getCid());
55+
}
56+
});
57+
}
58+
59+
@Override
60+
public int getItemCount() {
61+
return mDataset.size();
62+
}
63+
64+
interface Callback {
65+
void onBaseCurrencySelected(String cid);
66+
}
67+
68+
// Provide a reference to the views for each data item
69+
// Complex data items may need more than one view per item, and
70+
// you provide access to all the views for a data item in a view holder
71+
static class ViewHolder extends RecyclerView.ViewHolder {
72+
// each data item is just a string in this case
73+
TextView textViewAlphabet;
74+
TextView textViewCurrencyCode;
75+
TextView textViewCurrencyName;
76+
ImageView imageViewCountryFlag;
77+
78+
ViewHolder(View v) {
79+
super(v);
80+
textViewAlphabet = (TextView) v.findViewById(R.id.textViewAlphabet);
81+
textViewCurrencyCode = (TextView) v.findViewById(R.id.textViewCurrencyCode);
82+
textViewCurrencyName = (TextView) v.findViewById(R.id.textViewCurrencyName);
83+
imageViewCountryFlag = (ImageView) v.findViewById(R.id.imageViewCountryFlag);
84+
}
85+
86+
}
87+
}

0 commit comments

Comments
 (0)