diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
new file mode 100644
index 0000000..d5518c1
--- /dev/null
+++ b/.idea/jarRepositories.xml
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml
deleted file mode 100644
index 7f68460..0000000
--- a/.idea/runConfigurations.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/README.md b/README.md
index 40bdc1f..6b2c910 100644
--- a/README.md
+++ b/README.md
@@ -1,13 +1,13 @@
# TimetableView
[](https://opensource.org/licenses/Apache-2.0)
[](https://android-arsenal.com/api?level=19)
-[](https://jitpack.io/#tlaabs/TimetableView)
+[](https://jitpack.io/#omarb1989/TimetableView)
Android Library that creates simple time table.
+
+
-
-
## How to import
@@ -23,7 +23,7 @@ allprojects {
Add the dependency
```gradle
dependencies {
- implementation 'com.github.tlaabs:TimetableView:1.0.3-fx1'
+ implementation 'omarb1989:TimetableView:1.0.4-fx5'
}
```
@@ -36,7 +36,7 @@ xmlns:app="http://schemas.android.com/apk/res-auto"
### TimetableView in layout
```xml
- schedules) {
+
+ }
+ });
+```
### Add schdule
```java
ArrayList schedules = new ArrayList();
@@ -103,6 +120,7 @@ schedule.setClassPlace("IT-601"); // sets place
schedule.setProfessorName("Won Kim"); // sets professor
schedule.setStartTime(new Time(10,0)); // sets the beginning of class time (hour,minute)
schedule.setEndTime(new Time(13,30)); // sets the end of class time (hour,minute)
+int uniqueId = schedule.get_id();// you can use it later on wherever you get schedule object to identify it
schedules.add(schedule);
//.. add one or more schedules
timetable.add(schedules);
@@ -123,7 +141,7 @@ timetable.removeAll(); // remove all items
### Highlight header
**1.Color type(Default)**
```xml
-
+ package="com.github.omarb1989.timetableviewdemo">
-
+
-
+
\ No newline at end of file
diff --git a/app/src/main/java/com/github/tlaabs/timetableviewdemo/EditActivity.java b/app/src/main/java/com/github/omarb1989/timetableviewdemo/EditActivity.java
similarity index 96%
rename from app/src/main/java/com/github/tlaabs/timetableviewdemo/EditActivity.java
rename to app/src/main/java/com/github/omarb1989/timetableviewdemo/EditActivity.java
index f98b153..ec64517 100644
--- a/app/src/main/java/com/github/tlaabs/timetableviewdemo/EditActivity.java
+++ b/app/src/main/java/com/github/omarb1989/timetableviewdemo/EditActivity.java
@@ -1,9 +1,9 @@
-package com.github.tlaabs.timetableviewdemo;
+package com.github.omarb1989.timetableviewdemo;
import android.app.TimePickerDialog;
import android.content.Context;
import android.content.Intent;
-import android.support.v7.app.AppCompatActivity;
+import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
@@ -13,8 +13,8 @@
import android.widget.TextView;
import android.widget.TimePicker;
-import com.github.tlaabs.timetableview.Schedule;
-import com.github.tlaabs.timetableview.Time;
+import com.github.omarb1989.timetableview.Schedule;
+import com.github.omarb1989.timetableview.Time;
import java.util.ArrayList;
diff --git a/app/src/main/java/com/github/tlaabs/timetableviewdemo/MainActivity.java b/app/src/main/java/com/github/omarb1989/timetableviewdemo/MainActivity.java
similarity index 57%
rename from app/src/main/java/com/github/tlaabs/timetableviewdemo/MainActivity.java
rename to app/src/main/java/com/github/omarb1989/timetableviewdemo/MainActivity.java
index 75cce12..f9329a1 100644
--- a/app/src/main/java/com/github/tlaabs/timetableviewdemo/MainActivity.java
+++ b/app/src/main/java/com/github/omarb1989/timetableviewdemo/MainActivity.java
@@ -1,18 +1,20 @@
-package com.github.tlaabs.timetableviewdemo;
+package com.github.omarb1989.timetableviewdemo;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
-import android.preference.PreferenceManager;
-import android.support.annotation.Nullable;
-import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
+import android.preference.PreferenceManager;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
-import com.github.tlaabs.timetableview.Schedule;
-import com.github.tlaabs.timetableview.TimetableView;
+import androidx.annotation.Nullable;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.core.content.res.ResourcesCompat;
+
+import com.github.omarb1989.timetableview.Schedule;
+import com.github.omarb1989.timetableview.TimetableView;
import java.util.ArrayList;
@@ -27,15 +29,24 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
private Button loadBtn;
private TimetableView timetable;
+
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
+ timetable.setOnStickerSelectEventListener(new TimetableView.OnStickerSelectedLongClickListener() {
+ @Override
+ public void OnStickerSelectedLongClick(int idx, ArrayList schedules) {
+ //Toast.makeText(context, "LongClick idx = " + idx, Toast.LENGTH_SHORT).show();
+ }
+ });
+ // timetable.setBackgroundColor(ResourcesCompat.getColor(getResources(),R.color.default_sticker_font_color));
+
}
- private void init(){
+ private void init() {
this.context = this;
addBtn = findViewById(R.id.add_btn);
clearBtn = findViewById(R.id.clear_btn);
@@ -47,7 +58,7 @@ private void init(){
initView();
}
- private void initView(){
+ private void initView() {
addBtn.setOnClickListener(this);
clearBtn.setOnClickListener(this);
saveBtn.setOnClickListener(this);
@@ -56,22 +67,23 @@ private void initView(){
timetable.setOnStickerSelectEventListener(new TimetableView.OnStickerSelectedListener() {
@Override
public void OnStickerSelected(int idx, ArrayList schedules) {
+ //Toast.makeText(context, "idx = " + idx, Toast.LENGTH_SHORT).show();
Intent i = new Intent(context, EditActivity.class);
- i.putExtra("mode",REQUEST_EDIT);
+ i.putExtra("mode", REQUEST_EDIT);
i.putExtra("idx", idx);
i.putExtra("schedules", schedules);
- startActivityForResult(i,REQUEST_EDIT);
+ startActivityForResult(i, REQUEST_EDIT);
}
});
}
@Override
public void onClick(View v) {
- switch (v.getId()){
+ switch (v.getId()) {
case R.id.add_btn:
- Intent i = new Intent(this,EditActivity.class);
- i.putExtra("mode",REQUEST_ADD);
- startActivityForResult(i,REQUEST_ADD);
+ Intent i = new Intent(this, EditActivity.class);
+ i.putExtra("mode", REQUEST_ADD);
+ startActivityForResult(i, REQUEST_ADD);
break;
case R.id.clear_btn:
timetable.removeAll();
@@ -87,45 +99,49 @@ public void onClick(View v) {
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
- switch (requestCode){
+ switch (requestCode) {
case REQUEST_ADD:
- if(resultCode == EditActivity.RESULT_OK_ADD){
- ArrayList item = (ArrayList)data.getSerializableExtra("schedules");
+ if (resultCode == EditActivity.RESULT_OK_ADD) {
+ ArrayList item = (ArrayList) data.getSerializableExtra("schedules");
timetable.add(item);
}
break;
case REQUEST_EDIT:
/** Edit -> Submit */
- if(resultCode == EditActivity.RESULT_OK_EDIT){
- int idx = data.getIntExtra("idx",-1);
- ArrayList item = (ArrayList)data.getSerializableExtra("schedules");
- timetable.edit(idx,item);
+ if (resultCode == EditActivity.RESULT_OK_EDIT) {
+ int idx = data.getIntExtra("idx", -1);
+ ArrayList item = (ArrayList) data.getSerializableExtra("schedules");
+ timetable.edit(idx, item);
}
/** Edit -> Delete */
- else if(resultCode == EditActivity.RESULT_OK_DELETE){
- int idx = data.getIntExtra("idx",-1);
+ else if (resultCode == EditActivity.RESULT_OK_DELETE) {
+ int idx = data.getIntExtra("idx", -1);
timetable.remove(idx);
}
break;
}
}
- /** save timetableView's data to SharedPreferences in json format */
- private void saveByPreference(String data){
+ /**
+ * save timetableView's data to SharedPreferences in json format
+ */
+ private void saveByPreference(String data) {
SharedPreferences mPref = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = mPref.edit();
- editor.putString("timetable_demo",data);
+ editor.putString("timetable_demo", data);
editor.commit();
- Toast.makeText(this,"saved!",Toast.LENGTH_SHORT).show();
+ Toast.makeText(this, "saved!", Toast.LENGTH_SHORT).show();
}
- /** get json data from SharedPreferences and then restore the timetable */
- private void loadSavedData(){
+ /**
+ * get json data from SharedPreferences and then restore the timetable
+ */
+ private void loadSavedData() {
timetable.removeAll();
SharedPreferences mPref = PreferenceManager.getDefaultSharedPreferences(this);
- String savedData = mPref.getString("timetable_demo","");
- if(savedData == null && savedData.equals("")) return;
+ String savedData = mPref.getString("timetable_demo", "");
+ if (savedData == null && savedData.equals("")) return;
timetable.load(savedData);
- Toast.makeText(this,"loaded!",Toast.LENGTH_SHORT).show();
+ Toast.makeText(this, "loaded!", Toast.LENGTH_SHORT).show();
}
}
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index aeafffd..a5d8ab8 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -41,13 +41,21 @@
-
+ app:header_title="@array/header_title"/>
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/test/java/com/github/tlaabs/timetableviewdemo/ExampleUnitTest.java b/app/src/test/java/com/github/omarb1989/timetableviewdemo/ExampleUnitTest.java
similarity index 87%
rename from app/src/test/java/com/github/tlaabs/timetableviewdemo/ExampleUnitTest.java
rename to app/src/test/java/com/github/omarb1989/timetableviewdemo/ExampleUnitTest.java
index 0eae514..ff041b6 100644
--- a/app/src/test/java/com/github/tlaabs/timetableviewdemo/ExampleUnitTest.java
+++ b/app/src/test/java/com/github/omarb1989/timetableviewdemo/ExampleUnitTest.java
@@ -1,4 +1,4 @@
-package com.github.tlaabs.timetableviewdemo;
+package com.github.omarb1989.timetableviewdemo;
import org.junit.Test;
diff --git a/gradle.properties b/gradle.properties
index 82618ce..d546dea 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -6,6 +6,8 @@
# http://www.gradle.org/docs/current/userguide/build_environment.html
# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
+android.enableJetifier=true
+android.useAndroidX=true
org.gradle.jvmargs=-Xmx1536m
# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
diff --git a/timetableview/build.gradle b/timetableview/build.gradle
index eb6f9e6..36e30d1 100644
--- a/timetableview/build.gradle
+++ b/timetableview/build.gradle
@@ -1,15 +1,15 @@
apply plugin: 'com.android.library'
android {
- compileSdkVersion 28
+ compileSdkVersion 30
defaultConfig {
minSdkVersion 19
- targetSdkVersion 28
- versionCode 3
- versionName "1.0.3"
+ targetSdkVersion 30
+ versionCode 11
+ versionName "1.0.4-fx5"
- testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
+ testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner'
}
@@ -25,12 +25,12 @@ android {
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
- implementation 'com.android.support:appcompat-v7:28.0.0'
+ implementation 'androidx.appcompat:appcompat:1.0.0'
testImplementation 'junit:junit:4.12'
- androidTestImplementation 'com.android.support.test:runner:1.0.2'
- androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
+ androidTestImplementation 'androidx.test.ext:junit:1.1.1'
+ androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0'
implementation 'com.google.code.gson:gson:2.8.5'
}
apply plugin: 'com.github.dcendents.android-maven'
-group='com.github.tlaabs'
\ No newline at end of file
+group='com.github.omarb1989'
\ No newline at end of file
diff --git a/timetableview/src/androidTest/java/com/github/tlaabs/timetableview/ExampleInstrumentedTest.java b/timetableview/src/androidTest/java/com/github/omarb1989/timetableview/ExampleInstrumentedTest.java
similarity index 68%
rename from timetableview/src/androidTest/java/com/github/tlaabs/timetableview/ExampleInstrumentedTest.java
rename to timetableview/src/androidTest/java/com/github/omarb1989/timetableview/ExampleInstrumentedTest.java
index 60498f1..226c2e2 100644
--- a/timetableview/src/androidTest/java/com/github/tlaabs/timetableview/ExampleInstrumentedTest.java
+++ b/timetableview/src/androidTest/java/com/github/omarb1989/timetableview/ExampleInstrumentedTest.java
@@ -1,8 +1,8 @@
-package com.github.tlaabs.timetableview;
+package com.github.omarb1989.timetableview;
import android.content.Context;
-import android.support.test.InstrumentationRegistry;
-import android.support.test.runner.AndroidJUnit4;
+import androidx.test.platform.app.InstrumentationRegistry;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -19,7 +19,7 @@ public class ExampleInstrumentedTest {
@Test
public void useAppContext() {
// Context of the app under test.
- Context appContext = InstrumentationRegistry.getTargetContext();
+ Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
assertEquals("com.github.devsim.timetableview.test", appContext.getPackageName());
}
diff --git a/timetableview/src/main/AndroidManifest.xml b/timetableview/src/main/AndroidManifest.xml
index 908ce02..65f8816 100644
--- a/timetableview/src/main/AndroidManifest.xml
+++ b/timetableview/src/main/AndroidManifest.xml
@@ -1,2 +1,2 @@
+ package="com.github.omarb1989.timetableview" />
diff --git a/timetableview/src/main/java/com/github/omarb1989/timetableview/BorderWidth.java b/timetableview/src/main/java/com/github/omarb1989/timetableview/BorderWidth.java
new file mode 100644
index 0000000..becfe28
--- /dev/null
+++ b/timetableview/src/main/java/com/github/omarb1989/timetableview/BorderWidth.java
@@ -0,0 +1,5 @@
+package com.github.omarb1989.timetableview;
+
+public enum BorderWidth {
+ NO_WIDTH,LIGHT,NORMAL,THICK,EXTRA_THICK
+}
diff --git a/timetableview/src/main/java/com/github/tlaabs/timetableview/HighlightMode.java b/timetableview/src/main/java/com/github/omarb1989/timetableview/HighlightMode.java
similarity index 54%
rename from timetableview/src/main/java/com/github/tlaabs/timetableview/HighlightMode.java
rename to timetableview/src/main/java/com/github/omarb1989/timetableview/HighlightMode.java
index dfa98a2..31b92de 100644
--- a/timetableview/src/main/java/com/github/tlaabs/timetableview/HighlightMode.java
+++ b/timetableview/src/main/java/com/github/omarb1989/timetableview/HighlightMode.java
@@ -1,4 +1,4 @@
-package com.github.tlaabs.timetableview;
+package com.github.omarb1989.timetableview;
public enum HighlightMode {
COLOR,
diff --git a/timetableview/src/main/java/com/github/tlaabs/timetableview/SaveManager.java b/timetableview/src/main/java/com/github/omarb1989/timetableview/SaveManager.java
similarity index 96%
rename from timetableview/src/main/java/com/github/tlaabs/timetableview/SaveManager.java
rename to timetableview/src/main/java/com/github/omarb1989/timetableview/SaveManager.java
index de62c9a..05945d7 100644
--- a/timetableview/src/main/java/com/github/tlaabs/timetableview/SaveManager.java
+++ b/timetableview/src/main/java/com/github/omarb1989/timetableview/SaveManager.java
@@ -1,6 +1,4 @@
-package com.github.tlaabs.timetableview;
-
-import android.util.Log;
+package com.github.omarb1989.timetableview;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
@@ -23,6 +21,7 @@ public static String saveSticker(HashMap stickers){
ArrayList schedules = stickers.get(idx).getSchedules();
for(Schedule schedule : schedules){
JsonObject obj3 = new JsonObject();
+ obj3.addProperty("_id",schedule._id);
obj3.addProperty("classTitle",schedule.classTitle);
obj3.addProperty("classPlace",schedule.classPlace);
obj3.addProperty("professorName",schedule.getProfessorName());
@@ -57,6 +56,7 @@ public static HashMap loadSticker(String json){
for(int k = 0 ; k < arr2.size(); k++){
Schedule schedule = new Schedule();
JsonObject obj3 = (JsonObject)arr2.get(k);
+ schedule.set_id(obj3.get("_id").getAsInt());
schedule.setClassTitle(obj3.get("classTitle").getAsString());
schedule.setClassPlace(obj3.get("classPlace").getAsString());
schedule.setProfessorName(obj3.get("professorName").getAsString());
diff --git a/timetableview/src/main/java/com/github/tlaabs/timetableview/Schedule.java b/timetableview/src/main/java/com/github/omarb1989/timetableview/Schedule.java
similarity index 81%
rename from timetableview/src/main/java/com/github/tlaabs/timetableview/Schedule.java
rename to timetableview/src/main/java/com/github/omarb1989/timetableview/Schedule.java
index 64c7815..e4cc168 100644
--- a/timetableview/src/main/java/com/github/tlaabs/timetableview/Schedule.java
+++ b/timetableview/src/main/java/com/github/omarb1989/timetableview/Schedule.java
@@ -1,4 +1,4 @@
-package com.github.tlaabs.timetableview;
+package com.github.omarb1989.timetableview;
import java.io.Serializable;
@@ -11,9 +11,11 @@ public class Schedule implements Serializable {
static final int SAT = 5;
static final int SUN = 6;
- String classTitle="";
- String classPlace="";
- String professorName="";
+
+ int _id;
+ String classTitle = "";
+ String classPlace = "";
+ String professorName = "";
private int day = 0;
private Time startTime;
private Time endTime;
@@ -21,6 +23,15 @@ public class Schedule implements Serializable {
public Schedule() {
this.startTime = new Time();
this.endTime = new Time();
+ _id = (int) System.currentTimeMillis();
+ }
+
+ public int get_id() {
+ return _id;
+ }
+
+ public void set_id(int _id) {
+ this._id = _id;
}
public String getProfessorName() {
diff --git a/timetableview/src/main/java/com/github/tlaabs/timetableview/Sticker.java b/timetableview/src/main/java/com/github/omarb1989/timetableview/Sticker.java
similarity index 93%
rename from timetableview/src/main/java/com/github/tlaabs/timetableview/Sticker.java
rename to timetableview/src/main/java/com/github/omarb1989/timetableview/Sticker.java
index 6a32e39..17382b1 100644
--- a/timetableview/src/main/java/com/github/tlaabs/timetableview/Sticker.java
+++ b/timetableview/src/main/java/com/github/omarb1989/timetableview/Sticker.java
@@ -1,4 +1,4 @@
-package com.github.tlaabs.timetableview;
+package com.github.omarb1989.timetableview;
import android.widget.TextView;
diff --git a/timetableview/src/main/java/com/github/tlaabs/timetableview/Time.java b/timetableview/src/main/java/com/github/omarb1989/timetableview/Time.java
similarity index 92%
rename from timetableview/src/main/java/com/github/tlaabs/timetableview/Time.java
rename to timetableview/src/main/java/com/github/omarb1989/timetableview/Time.java
index e9272e1..6f213d4 100644
--- a/timetableview/src/main/java/com/github/tlaabs/timetableview/Time.java
+++ b/timetableview/src/main/java/com/github/omarb1989/timetableview/Time.java
@@ -1,4 +1,4 @@
-package com.github.tlaabs.timetableview;
+package com.github.omarb1989.timetableview;
import java.io.Serializable;
diff --git a/timetableview/src/main/java/com/github/tlaabs/timetableview/TimetableView.java b/timetableview/src/main/java/com/github/omarb1989/timetableview/TimetableView.java
similarity index 71%
rename from timetableview/src/main/java/com/github/tlaabs/timetableview/TimetableView.java
rename to timetableview/src/main/java/com/github/omarb1989/timetableview/TimetableView.java
index 8f1644f..8bdd5a8 100644
--- a/timetableview/src/main/java/com/github/tlaabs/timetableview/TimetableView.java
+++ b/timetableview/src/main/java/com/github/omarb1989/timetableview/TimetableView.java
@@ -1,14 +1,15 @@
-package com.github.tlaabs.timetableview;
+package com.github.omarb1989.timetableview;
-import android.app.Activity;
import android.content.Context;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.graphics.Color;
import android.graphics.Point;
import android.graphics.Typeface;
+import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
-import android.support.v7.content.res.AppCompatResources;
+import android.graphics.drawable.GradientDrawable;
+import android.graphics.drawable.ShapeDrawable;
import android.util.AttributeSet;
import android.util.Log;
import android.util.TypedValue;
@@ -23,6 +24,9 @@
import android.widget.TableRow;
import android.widget.TextView;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.core.content.res.ResourcesCompat;
+
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
@@ -32,7 +36,7 @@ public class TimetableView extends LinearLayout {
private static final int DEFAULT_COLUMN_COUNT = 6;
private static final int DEFAULT_CELL_HEIGHT_DP = 50;
private static final int DEFAULT_SIDE_CELL_WIDTH_DP = 30;
- private static final int DEFAULT_START_TIME = 9;
+ private static final int DEFAULT_START_TIME = 8;
private static final int DEFAULT_SIDE_HEADER_FONT_SIZE_DP = 13;
private static final int DEFAULT_HEADER_FONT_SIZE_DP = 15;
@@ -48,6 +52,12 @@ public class TimetableView extends LinearLayout {
private String[] stickerColors;
private int startTime;
private int headerHighlightColor;
+ private int colorSurface;
+ private int colorBorders;
+ private int sideColorText;
+ private int sideColor;
+ private int sideAndHeaderTextColor;
+ private int borderWidth;
private RelativeLayout stickerBox;
TableLayout tableHeader;
@@ -59,6 +69,7 @@ public class TimetableView extends LinearLayout {
private int stickerCount = -1;
private OnStickerSelectedListener stickerSelectedListener = null;
+ private OnStickerSelectedLongClickListener stickerSelectedLongClickListener = null;
private HighlightMode highlightMode = HighlightMode.COLOR;
private int headerHighlightImageSize;
@@ -92,11 +103,17 @@ private void getAttrs(AttributeSet attrs) {
stickerColors = a.getResources().getStringArray(colorsId);
startTime = a.getInt(R.styleable.TimetableView_start_time, DEFAULT_START_TIME);
headerHighlightColor = a.getColor(R.styleable.TimetableView_header_highlight_color, getResources().getColor(R.color.default_header_highlight_color));
- int highlightTypeValue = a.getInteger(R.styleable.TimetableView_header_highlight_type,0);
- if(highlightTypeValue == 0) highlightMode = HighlightMode.COLOR;
- else if(highlightTypeValue == 1) highlightMode = HighlightMode.IMAGE;
+ int highlightTypeValue = a.getInteger(R.styleable.TimetableView_header_highlight_type, 0);
+ if (highlightTypeValue == 0) highlightMode = HighlightMode.COLOR;
+ else if (highlightTypeValue == 1) highlightMode = HighlightMode.IMAGE;
headerHighlightImageSize = a.getDimensionPixelSize(R.styleable.TimetableView_header_highlight_image_size, dp2Px(24));
headerHighlightImage = a.getDrawable(R.styleable.TimetableView_header_highlight_image);
+ colorSurface = a.getColor(R.styleable.TimetableView_color_surface, getResources().getColor(R.color.default_color_surface));
+ colorBorders = a.getColor(R.styleable.TimetableView_color_borders, getResources().getColor(R.color.colorBorders));
+ sideColorText = a.getColor(R.styleable.TimetableView_side_color_text, getResources().getColor(R.color.default_color_side_text));
+ sideColor = a.getColor(R.styleable.TimetableView_color_side, getResources().getColor(R.color.colorSideHeader));
+ sideAndHeaderTextColor = a.getColor(R.styleable.TimetableView_color_side_header_text, getResources().getColor(R.color.default_color_side_header_text));
+ borderWidth = a.getInt(R.styleable.TimetableView_border_width, BorderWidth.NORMAL.ordinal());
a.recycle();
}
@@ -109,6 +126,7 @@ private void init() {
tableHeader = view.findViewById(R.id.table_header);
tableBox = view.findViewById(R.id.table_box);
+
createTable();
}
@@ -116,6 +134,11 @@ public void setOnStickerSelectEventListener(OnStickerSelectedListener listener)
stickerSelectedListener = listener;
}
+ public void setOnStickerSelectEventListener(OnStickerSelectedLongClickListener listener) {
+ stickerSelectedLongClickListener = listener;
+ }
+
+
/**
* date : 2019-02-08
* get all schedules TimetableView has.
@@ -166,10 +189,19 @@ private void add(final ArrayList schedules, int specIdx) {
tv.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
- if(stickerSelectedListener != null)
+ if (stickerSelectedListener != null)
stickerSelectedListener.OnStickerSelected(count, schedules);
}
});
+ tv.setOnLongClickListener(new OnLongClickListener() {
+ @Override
+ public boolean onLongClick(View v) {
+ if (stickerSelectedLongClickListener != null)
+ stickerSelectedLongClickListener.OnStickerSelectedLongClick(count, schedules);
+ return true;
+ }
+ });
+
sticker.addTextView(tv);
sticker.addSchedule(schedule);
@@ -221,30 +253,29 @@ public void remove(int idx) {
}
public void setHeaderHighlight(int idx) {
- if(idx < 0)return;
+ if (idx < 0) return;
TableRow row = (TableRow) tableHeader.getChildAt(0);
View element = row.getChildAt(idx);
- if(highlightMode == HighlightMode.COLOR) {
- TextView tx = (TextView)element;
+ if (highlightMode == HighlightMode.COLOR) {
+ TextView tx = (TextView) element;
tx.setTextColor(Color.parseColor("#FFFFFF"));
tx.setBackgroundColor(headerHighlightColor);
tx.setTypeface(null, Typeface.BOLD);
tx.setTextSize(TypedValue.COMPLEX_UNIT_DIP, DEFAULT_HEADER_HIGHLIGHT_FONT_SIZE_DP);
- }
- else if(highlightMode == HighlightMode.IMAGE){
+ } else if (highlightMode == HighlightMode.IMAGE) {
RelativeLayout outer = new RelativeLayout(context);
outer.setLayoutParams(createTableRowParam(cellHeight));
ImageView iv = new ImageView(context);
- RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(headerHighlightImageSize,headerHighlightImageSize);
- params.addRule(RelativeLayout.CENTER_IN_PARENT,RelativeLayout.TRUE);
+ RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(headerHighlightImageSize, headerHighlightImageSize);
+ params.addRule(RelativeLayout.CENTER_IN_PARENT, RelativeLayout.TRUE);
iv.setLayoutParams(params);
iv.setScaleType(ImageView.ScaleType.CENTER_CROP);
row.removeViewAt(idx);
outer.addView(iv);
- row.addView(outer,idx);
+ row.addView(outer, idx);
- if(headerHighlightImage != null) {
+ if (headerHighlightImage != null) {
iv.setImageDrawable(headerHighlightImage);
}
@@ -279,16 +310,29 @@ private void createTable() {
for (int k = 0; k < columnCount; k++) {
TextView tv = new TextView(context);
tv.setLayoutParams(createTableRowParam(cellHeight));
+ tv.setTextColor(sideColorText);
if (k == 0) {
tv.setText(getHeaderTime(i));
- tv.setTextColor(getResources().getColor(R.color.colorHeaderText));
tv.setTextSize(TypedValue.COMPLEX_UNIT_DIP, DEFAULT_SIDE_HEADER_FONT_SIZE_DP);
- tv.setBackgroundColor(getResources().getColor(R.color.colorHeader));
+ tv.setBackgroundColor(sideColor);
tv.setGravity(Gravity.TOP | Gravity.CENTER_HORIZONTAL);
tv.setLayoutParams(createTableRowParam(sideCellWidth, cellHeight));
} else {
tv.setText("");
- tv.setBackground(getResources().getDrawable(R.drawable.item_border));
+ /* ------------set shape color and Stroke of item_border.xml ---------- */
+ Resources res = getResources();
+ Log.i("createTable", "color surface: " + String.valueOf(colorSurface));
+ tv.setBackground(ResourcesCompat.getDrawable(res, R.drawable.item_border, null));
+ Drawable background = tv.getBackground();
+ if (background instanceof ShapeDrawable) {
+ ((ShapeDrawable) background).getPaint().setColor(colorSurface);
+ } else if (background instanceof GradientDrawable) {
+ ((GradientDrawable) background).setColor(colorSurface);
+ ((GradientDrawable) background).setStroke(borderWidth, colorBorders);
+ } else if (background instanceof ColorDrawable) {
+ ((ColorDrawable) background).setColor(colorSurface);
+ }
+ /* --------------------- Finish set ----------------------- */
tv.setGravity(Gravity.RIGHT);
}
tableRow.addView(tv);
@@ -308,7 +352,7 @@ private void createTableHeader() {
} else {
tv.setLayoutParams(createTableRowParam(cellHeight));
}
- tv.setTextColor(getResources().getColor(R.color.colorHeaderText));
+ tv.setTextColor(sideAndHeaderTextColor);
tv.setTextSize(TypedValue.COMPLEX_UNIT_DIP, DEFAULT_HEADER_FONT_SIZE_DP);
tv.setText(headerTitle[i]);
tv.setGravity(Gravity.CENTER);
@@ -329,11 +373,11 @@ private RelativeLayout.LayoutParams createStickerParam(Schedule schedule) {
return param;
}
- private int calCellWidth(){
- Display display = ((Activity) context).getWindowManager().getDefaultDisplay();
+ private int calCellWidth() {
+ Display display = ((AppCompatActivity) context).getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
- int cell_w = (size.x-getPaddingLeft() - getPaddingRight()- sideCellWidth) / (columnCount - 1);
+ int cell_w = (size.x - getPaddingLeft() - getPaddingRight() - sideCellWidth) / (columnCount - 1);
return cell_w;
}
@@ -365,7 +409,11 @@ private TableRow.LayoutParams createTableRowParam(int w_px, int h_px) {
private String getHeaderTime(int i) {
int p = (startTime + i) % 24;
int res = p <= 12 ? p : p - 12;
- return res + "";
+ if ((res >= 8) && (res < 12)) {
+ return res + "\nAM";
+ } else if (((res >= 1) && (res <= 7))||(res == 12)) {
+ return res + "\nPM";
+ } else return res + " outOfBoundTime";
}
static private int dp2Px(int dp) {
@@ -381,6 +429,12 @@ private void onCreateByBuilder(Builder builder) {
this.stickerColors = builder.stickerColors;
this.startTime = builder.startTime;
this.headerHighlightColor = builder.headerHighlightColor;
+ this.colorSurface = builder.colorSurface;
+ this.colorBorders = builder.colorBorders;
+ this.sideColorText = builder.sideColorText;
+ this.sideColor = builder.sideColor;
+ this.sideAndHeaderTextColor = builder.sideAndHeaderTextColor;
+ this.borderWidth = builder.borderWidth;
init();
}
@@ -390,6 +444,10 @@ public interface OnStickerSelectedListener {
void OnStickerSelected(int idx, ArrayList schedules);
}
+ public interface OnStickerSelectedLongClickListener {
+ void OnStickerSelectedLongClick(int idx, ArrayList schedules);
+ }
+
static class Builder {
private Context context;
private int rowCount;
@@ -400,6 +458,12 @@ static class Builder {
private String[] stickerColors;
private int startTime;
private int headerHighlightColor;
+ private int colorSurface;
+ private int colorBorders;
+ private int sideColorText;
+ private int sideColor;
+ private int sideAndHeaderTextColor;
+ private int borderWidth;
public Builder(Context context) {
this.context = context;
@@ -411,6 +475,12 @@ public Builder(Context context) {
stickerColors = context.getResources().getStringArray(R.array.default_sticker_color);
startTime = DEFAULT_START_TIME;
headerHighlightColor = context.getResources().getColor(R.color.default_header_highlight_color);
+ colorSurface = context.getResources().getColor(R.color.default_color_surface);
+ colorBorders = context.getResources().getColor(R.color.colorBorders);
+ sideColorText = context.getResources().getColor(R.color.default_color_side_text);
+ sideColor = context.getResources().getColor(R.color.colorSideHeader);
+ sideAndHeaderTextColor = context.getResources().getColor(R.color.default_color_side_header_text);
+ borderWidth = BorderWidth.NORMAL.ordinal();
}
public Builder setRowCount(int n) {
@@ -453,6 +523,36 @@ public Builder setHeaderHighlightColor(int c) {
return this;
}
+ public Builder setColorSurface(int c) {
+ this.colorSurface = c;
+ return this;
+ }
+
+ public Builder setColorBorders(int c) {
+ this.colorBorders = c;
+ return this;
+ }
+
+ public Builder setColorText(int c) {
+ this.sideColorText = c;
+ return this;
+ }
+
+ public Builder setSideColorText(int c) {
+ this.sideColor = c;
+ return this;
+ }
+
+ public Builder setSideAndHeaderTextColor(int c) {
+ this.sideAndHeaderTextColor = c;
+ return this;
+ }
+
+ public Builder setBorderWidth(int b) {
+ this.borderWidth = b;
+ return this;
+ }
+
public TimetableView build() {
TimetableView timetableView = new TimetableView(context);
timetableView.onCreateByBuilder(this);
diff --git a/timetableview/src/main/res/drawable/item_border.xml b/timetableview/src/main/res/drawable/item_border.xml
index de89ee8..c7a9ca4 100644
--- a/timetableview/src/main/res/drawable/item_border.xml
+++ b/timetableview/src/main/res/drawable/item_border.xml
@@ -1,7 +1,7 @@
-
+
+ android:color="@color/colorBorders" />
\ No newline at end of file
diff --git a/timetableview/src/main/res/layout/table_header.xml b/timetableview/src/main/res/layout/table_header.xml
index faf08c4..d282a87 100644
--- a/timetableview/src/main/res/layout/table_header.xml
+++ b/timetableview/src/main/res/layout/table_header.xml
@@ -1,9 +1,9 @@
+
-
+ />
\ No newline at end of file
diff --git a/timetableview/src/main/res/layout/view_timetable.xml b/timetableview/src/main/res/layout/view_timetable.xml
index a7ec1a4..1254e9c 100644
--- a/timetableview/src/main/res/layout/view_timetable.xml
+++ b/timetableview/src/main/res/layout/view_timetable.xml
@@ -1,24 +1,23 @@
-
-
+ android:orientation="vertical">
+
+
+ android:layout_weight="1">
-
+
diff --git a/timetableview/src/main/res/values/attrs_timetable.xml b/timetableview/src/main/res/values/attrs_timetable.xml
index 9260988..192d93e 100644
--- a/timetableview/src/main/res/values/attrs_timetable.xml
+++ b/timetableview/src/main/res/values/attrs_timetable.xml
@@ -1,19 +1,31 @@
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
-
-
+
+
\ No newline at end of file
diff --git a/timetableview/src/main/res/values/colors.xml b/timetableview/src/main/res/values/colors.xml
index 19c69f5..4d0b4e1 100644
--- a/timetableview/src/main/res/values/colors.xml
+++ b/timetableview/src/main/res/values/colors.xml
@@ -1,8 +1,9 @@
- #fcfcfc
- #7d7d7d
- #efefef
+ #ffffff
+ #D9000000
+ @color/default_color_side_header_text
+ #F5F5F5
- #f08676
@@ -16,9 +17,6 @@
- #d397ed
- #7d7d7d
- #7d7d7d
- #ffffff
#74a4f3
- #ffffff
+ #ffffff
diff --git a/timetableview/src/test/java/com/github/tlaabs/timetableview/ExampleUnitTest.java b/timetableview/src/test/java/com/github/omarb1989/timetableview/ExampleUnitTest.java
similarity index 88%
rename from timetableview/src/test/java/com/github/tlaabs/timetableview/ExampleUnitTest.java
rename to timetableview/src/test/java/com/github/omarb1989/timetableview/ExampleUnitTest.java
index f3b41e4..2b3559c 100644
--- a/timetableview/src/test/java/com/github/tlaabs/timetableview/ExampleUnitTest.java
+++ b/timetableview/src/test/java/com/github/omarb1989/timetableview/ExampleUnitTest.java
@@ -1,4 +1,4 @@
-package com.github.tlaabs.timetableview;
+package com.github.omarb1989.timetableview;
import org.junit.Test;