Skip to content

Commit c121f38

Browse files
author
Sid Zi
committed
added local file selector
1 parent 3302fb4 commit c121f38

File tree

17 files changed

+271
-65
lines changed

17 files changed

+271
-65
lines changed

app/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ android {
88
applicationId "com.sidzi.circleofmusic"
99
minSdkVersion 17
1010
targetSdkVersion 25
11-
versionCode 8
12-
versionName "Guitar"
11+
versionCode 9
12+
versionName "Harpsichord"
1313
}
1414

1515
buildTypes {

app/src/main/AndroidManifest.xml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040

4141
<service android:name=".services.MusicPlayerService" />
4242

43-
<receiver android:name=".helpers.MediaButtonHandler">
43+
<receiver android:name=".recievers.MediaButtonHandler">
4444
<intent-filter>
4545
<action android:name="android.intent.action.MEDIA_BUTTON" />
4646
</intent-filter>
@@ -58,13 +58,15 @@
5858
android:theme="@style/AppTheme.NoActionBar" />
5959
<activity android:name=".ui.AlarmSettingActivity" />
6060

61-
<receiver android:name=".helpers.AlarmReciever" />
61+
<receiver android:name=".recievers.AlarmReciever" />
6262

6363
<activity
6464
android:name=".ui.AlarmActivity"
6565
android:configChanges="orientation|keyboardHidden|screenSize"
6666
android:label="@string/title_activity_alarm"
6767
android:theme="@style/FullscreenTheme" />
68+
69+
<activity android:name=".ui.ListFileActivity" />
6870
</application>
6971

7072
</manifest>

app/src/main/java/com/sidzi/circleofmusic/helpers/AlarmReciever.java renamed to app/src/main/java/com/sidzi/circleofmusic/recievers/AlarmReciever.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.sidzi.circleofmusic.helpers;
1+
package com.sidzi.circleofmusic.recievers;
22

33
import android.content.BroadcastReceiver;
44
import android.content.Context;

app/src/main/java/com/sidzi/circleofmusic/helpers/MediaButtonHandler.java renamed to app/src/main/java/com/sidzi/circleofmusic/recievers/MediaButtonHandler.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
1-
package com.sidzi.circleofmusic.helpers;
1+
package com.sidzi.circleofmusic.recievers;
22

33
import android.content.BroadcastReceiver;
44
import android.content.Context;
55
import android.content.Intent;
66

7+
import com.sidzi.circleofmusic.helpers.Utils;
78
import com.sidzi.circleofmusic.services.MusicPlayerService;
89

910
public class MediaButtonHandler extends BroadcastReceiver {

app/src/main/java/com/sidzi/circleofmusic/helpers/MusicPlayerViewHandler.java renamed to app/src/main/java/com/sidzi/circleofmusic/recievers/MusicPlayerViewHandler.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.sidzi.circleofmusic.helpers;
1+
package com.sidzi.circleofmusic.recievers;
22

33
import android.app.NotificationManager;
44
import android.app.PendingIntent;
@@ -16,6 +16,7 @@
1616

1717
import com.sidzi.circleofmusic.R;
1818
import com.sidzi.circleofmusic.entities.Track;
19+
import com.sidzi.circleofmusic.helpers.MusicServiceConnection;
1920
import com.sidzi.circleofmusic.services.MusicPlayerService;
2021
import com.sidzi.circleofmusic.ui.MainActivity;
2122

app/src/main/java/com/sidzi/circleofmusic/ui/AlarmSettingActivity.java

Lines changed: 70 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import java.util.Calendar;
3333

3434
public class AlarmSettingActivity extends AppCompatActivity {
35+
private static final int REQUEST_ALARM_PATH = 4114;
3536
EditText etTimePicker;
3637

3738
@Override
@@ -46,71 +47,78 @@ protected void onCreate(Bundle savedInstanceState) {
4647

4748
final DownloadManager downloadManager = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
4849

50+
etTimePicker.setHint("\"hhmm\" in 24 hr format");
4951

5052
bSelectAlarm.setOnClickListener(new View.OnClickListener() {
5153
@Override
5254
public void onClick(View view) {
53-
builder.setTitle("Select a sound")
54-
.setMessage("Select from a list of CoM alarms or choose from your own collection")
55-
.setPositiveButton("CoM Alarms", new DialogInterface.OnClickListener() {
56-
@Override
57-
public void onClick(final DialogInterface dialogInterface, int i) {
55+
if (etTimePicker.getText().toString().equals("")) {
56+
Toast.makeText(getApplicationContext(), "Enter the time first", Toast.LENGTH_SHORT).show();
57+
} else {
58+
builder.setTitle("Select a sound")
59+
.setMessage("Select from a list of CoM alarms or choose from your own collection")
60+
.setPositiveButton("CoM Alarms", new DialogInterface.OnClickListener() {
61+
@Override
62+
public void onClick(final DialogInterface dialogInterface, int i) {
5863
// Load CoM alarms
59-
RequestQueue requestQueue = Volley.newRequestQueue(getApplicationContext());
60-
JsonObjectRequest alarmArray = new JsonObjectRequest(Request.Method.GET, config.com_url + "getAlarms", null, new Response.Listener<JSONObject>() {
61-
@Override
62-
public void onResponse(JSONObject response) {
63-
try {
64-
final JSONArray alarms = response.getJSONArray("alarms");
65-
final ArrayAdapter<String> arrayAdapter = new ArrayAdapter<>(getApplicationContext(), R.layout.layout_row_alarm_selection);
66-
for (int i = 0; i < alarms.length(); i++)
67-
arrayAdapter.add(alarms.get(i).toString());
68-
innerBuilder.setAdapter(arrayAdapter, new DialogInterface.OnClickListener() {
69-
@Override
70-
public void onClick(DialogInterface dialogInterface, int i) {
71-
if (!new File(config.com_local_url + arrayAdapter.getItem(i)).exists()) {
72-
DownloadManager.Request request = new DownloadManager.Request(Uri.parse(config.com_url + "getAlarm" + arrayAdapter.getItem(i)));
73-
request.setTitle("Downloading Alarm Sound");
74-
request.setDestinationInExternalPublicDir("", "com-data/alarms/" + arrayAdapter.getItem(i));
75-
downloadManager.enqueue(request);
64+
RequestQueue requestQueue = Volley.newRequestQueue(getApplicationContext());
65+
JsonObjectRequest alarmArray = new JsonObjectRequest(Request.Method.GET, config.com_url + "getAlarms", null, new Response.Listener<JSONObject>() {
66+
@Override
67+
public void onResponse(JSONObject response) {
68+
try {
69+
final JSONArray alarms = response.getJSONArray("alarms");
70+
final ArrayAdapter<String> arrayAdapter = new ArrayAdapter<>(getApplicationContext(), R.layout.layout_row_alarm_selection);
71+
for (int i = 0; i < alarms.length(); i++)
72+
arrayAdapter.add(alarms.get(i).toString());
73+
innerBuilder.setAdapter(arrayAdapter, new DialogInterface.OnClickListener() {
74+
@Override
75+
public void onClick(DialogInterface dialogInterface, int i) {
76+
if (!new File(config.com_local_url + arrayAdapter.getItem(i)).exists()) {
77+
DownloadManager.Request request = new DownloadManager.Request(Uri.parse(config.com_url + "getAlarm" + arrayAdapter.getItem(i)));
78+
request.setTitle("Downloading Alarm Sound");
79+
request.setDestinationInExternalPublicDir("", "com-data/alarms/" + arrayAdapter.getItem(i));
80+
downloadManager.enqueue(request);
81+
}
82+
setAlarm(config.com_local_url + arrayAdapter.getItem(i));
83+
finish();
7684
}
77-
setAlarm(arrayAdapter.getItem(i));
78-
finish();
79-
}
80-
});
81-
} catch (JSONException e) {
82-
e.printStackTrace();
85+
});
86+
} catch (JSONException e) {
87+
e.printStackTrace();
88+
}
89+
8390
}
91+
}, new Response.ErrorListener() {
92+
@Override
93+
public void onErrorResponse(VolleyError error) {
8494

85-
}
86-
}, new Response.ErrorListener() {
87-
@Override
88-
public void onErrorResponse(VolleyError error) {
89-
90-
}
91-
});
92-
requestQueue.add(alarmArray);
93-
dialogInterface.dismiss();
94-
innerBuilder.create().show();
95-
}
96-
})
97-
.setNegativeButton("Personal Music", new DialogInterface.OnClickListener() {
98-
@Override
99-
public void onClick(DialogInterface dialogInterface, int i) {
95+
}
96+
});
97+
requestQueue.add(alarmArray);
98+
dialogInterface.dismiss();
99+
innerBuilder.create().show();
100+
}
101+
})
102+
.setNegativeButton("Personal Music", new DialogInterface.OnClickListener() {
103+
@Override
104+
public void onClick(DialogInterface dialogInterface, int i) {
100105
// Load file browser
101-
}
102-
});
103-
builder.create().show();
106+
Intent intent = new Intent(AlarmSettingActivity.this, ListFileActivity.class);
107+
startActivityForResult(intent, REQUEST_ALARM_PATH);
108+
109+
}
110+
});
111+
builder.create().show();
112+
}
104113
}
105114
});
106-
etTimePicker.setHint("\"hhmm\" in 24 hr format");
107115
}
108116

109117
void setAlarm(String alarm) {
110118

111119
Intent intent = new Intent(this, AlarmActivity.class);
112120

113-
intent.putExtra("alarm_path", config.com_local_url + alarm);
121+
intent.putExtra("alarm_path", alarm);
114122
intent.putExtra("after_alarm_path", "Alarm");
115123

116124

@@ -135,11 +143,24 @@ void setAlarm(String alarm) {
135143
}
136144

137145
int diffH(int c, int s) {
138-
// TODO Correct subtraction of time
139146
if (c <= s) {
140147
return s - c;
141148
} else {
142149
return s + 24 - c;
143150
}
144151
}
152+
153+
@Override
154+
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
155+
super.onActivityResult(requestCode, resultCode, data);
156+
if (requestCode == REQUEST_ALARM_PATH && resultCode == RESULT_OK) {
157+
String path;
158+
path = data.getStringExtra("filepath");
159+
if (!path.equals("") && !(new File(path).isDirectory()))
160+
setAlarm(path);
161+
else
162+
startActivityForResult(new Intent(this, ListFileActivity.class), REQUEST_ALARM_PATH);
163+
}
164+
}
165+
145166
}
Lines changed: 144 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,144 @@
1+
package com.sidzi.circleofmusic.ui;
2+
3+
import android.content.Intent;
4+
import android.os.Build;
5+
import android.os.Bundle;
6+
import android.os.Environment;
7+
import android.support.v7.app.AppCompatActivity;
8+
import android.support.v7.widget.LinearLayoutManager;
9+
import android.support.v7.widget.RecyclerView;
10+
import android.view.LayoutInflater;
11+
import android.view.Menu;
12+
import android.view.MenuItem;
13+
import android.view.View;
14+
import android.view.ViewGroup;
15+
import android.widget.TextView;
16+
17+
import com.sidzi.circleofmusic.R;
18+
import com.sidzi.circleofmusic.helpers.VerticalSpaceDecorationHelper;
19+
20+
import java.io.File;
21+
import java.util.ArrayList;
22+
23+
public class ListFileActivity extends AppCompatActivity {
24+
RecyclerView mRecyclerView;
25+
26+
RecyclerView.LayoutManager mLayoutManager;
27+
28+
FilesAdapter mAdapter;
29+
30+
@Override
31+
protected void onCreate(Bundle savedInstanceState) {
32+
super.onCreate(savedInstanceState);
33+
setContentView(R.layout.activity_file_list);
34+
35+
mAdapter = new FilesAdapter();
36+
37+
mRecyclerView = (RecyclerView) findViewById(R.id.rvListFiles);
38+
mLayoutManager = new LinearLayoutManager(this);
39+
40+
assert mRecyclerView != null;
41+
mRecyclerView.setLayoutManager(mLayoutManager);
42+
mRecyclerView.setHasFixedSize(true);
43+
mRecyclerView.setAdapter(mAdapter);
44+
45+
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP_MR1) {
46+
mRecyclerView.addItemDecoration(new VerticalSpaceDecorationHelper(this));
47+
}
48+
}
49+
50+
@Override
51+
public boolean onCreateOptionsMenu(Menu menu) {
52+
getMenuInflater().inflate(R.menu.menu_file_chooser, menu);
53+
return true;
54+
}
55+
56+
@Override
57+
public boolean onOptionsItemSelected(MenuItem item) {
58+
int id = item.getItemId();
59+
60+
if (id == R.id.mi_directory_up) {
61+
mAdapter.levelUp();
62+
}
63+
return super.onOptionsItemSelected(item);
64+
}
65+
66+
class FilesAdapter extends RecyclerView.Adapter<FilesAdapter.ViewHolder> {
67+
ArrayList<String> fileList;
68+
String path;
69+
70+
FilesAdapter() {
71+
path = Environment.getExternalStorageDirectory().getPath();
72+
setFileList();
73+
}
74+
75+
void levelDown(String next) {
76+
path = path + File.separator + next;
77+
setFileList();
78+
}
79+
80+
void levelUp() {
81+
path = path.substring(0, path.lastIndexOf("/"));
82+
setFileList();
83+
}
84+
85+
void setFileList() {
86+
fileList = new ArrayList<>();
87+
File dir = new File(path);
88+
if (!dir.canRead()) {
89+
setTitle("(inaccessible)");
90+
}
91+
if (dir.isDirectory()) {
92+
String[] list = dir.list();
93+
if (list != null) {
94+
for (String file : list) {
95+
if (!file.startsWith(".")) {
96+
fileList.add(file);
97+
}
98+
}
99+
}
100+
} else {
101+
selectedLevel();
102+
}
103+
notifyDataSetChanged();
104+
}
105+
106+
void selectedLevel() {
107+
Intent dataRec = new Intent();
108+
dataRec.putExtra("filepath", path);
109+
setResult(RESULT_OK, dataRec);
110+
finish();
111+
}
112+
113+
@Override
114+
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
115+
final View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_row_files, parent, false);
116+
return new ViewHolder(view);
117+
}
118+
119+
@Override
120+
public void onBindViewHolder(ViewHolder holder, int position) {
121+
holder.tvDirPath.setText(fileList.get(position));
122+
}
123+
124+
@Override
125+
public int getItemCount() {
126+
return fileList.size();
127+
}
128+
129+
class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
130+
TextView tvDirPath;
131+
132+
ViewHolder(View view) {
133+
super(view);
134+
this.tvDirPath = (TextView) view.findViewById(R.id.tvFileNameOrPath);
135+
view.setOnClickListener(this);
136+
}
137+
138+
@Override
139+
public void onClick(View view) {
140+
levelDown(tvDirPath.getText().toString());
141+
}
142+
}
143+
}
144+
}

app/src/main/java/com/sidzi/circleofmusic/ui/MainActivity.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,10 +50,10 @@
5050
import com.sidzi.circleofmusic.helpers.BucketSaver;
5151
import com.sidzi.circleofmusic.helpers.DatabaseSynchronization;
5252
import com.sidzi.circleofmusic.helpers.LocalMusicLoader;
53-
import com.sidzi.circleofmusic.helpers.MediaButtonHandler;
54-
import com.sidzi.circleofmusic.helpers.MusicPlayerViewHandler;
5553
import com.sidzi.circleofmusic.helpers.MusicServiceConnection;
5654
import com.sidzi.circleofmusic.helpers.VerticalSpaceDecorationHelper;
55+
import com.sidzi.circleofmusic.recievers.MediaButtonHandler;
56+
import com.sidzi.circleofmusic.recievers.MusicPlayerViewHandler;
5757
import com.sidzi.circleofmusic.services.MusicPlayerService;
5858

5959
import org.json.JSONException;
@@ -83,7 +83,7 @@ public class MainActivity extends AppCompatActivity {
8383
protected void onCreate(Bundle savedInstanceState) {
8484
super.onCreate(savedInstanceState);
8585
// TODO remove key before commit
86-
Rollbar.init(this, config.rollbar_key, "production");
86+
Rollbar.init(this, config.rollbar_key, "release");
8787
setTheme(R.style.AppTheme_NoActionBar);
8888
setContentView(R.layout.activity_main);
8989

309 Bytes
Loading
216 Bytes
Loading
310 Bytes
Loading
Loading

0 commit comments

Comments
 (0)