From b6423384cad892f878ff7e17734f85c5f4f0d72a Mon Sep 17 00:00:00 2001 From: ErolHaagenrud Date: Sun, 14 Dec 2025 08:25:59 +0100 Subject: [PATCH] =?UTF-8?q?F=C3=B8r=20h=C3=A5ndbok=20versjon=202?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 16 +- .../com/kbs/kbsintranett/HandbookAdapter.java | 107 +++++++++++++ .../kbsintranett/HandbookDetailFragment.java | 95 ++++++++++++ .../kbs/kbsintranett/HandbookFragment.java | 89 ++++++++++- .../com/kbs/kbsintranett/HandbookItem.java | 28 ++++ .../com/kbs/kbsintranett/HandbookPage.java | 15 ++ .../InternalLinkMovementMethod.java | 140 ++++++++++++++++++ .../com/kbs/kbsintranett/WebViewActivity.java | 54 +++++++ .../kbs/kbsintranett/WordPressApiService.java | 22 +-- app/src/main/res/drawable/ic_handbook_car.xml | 8 + app/src/main/res/drawable/ic_handbook_doc.xml | 8 + .../main/res/drawable/ic_handbook_general.xml | 8 + .../main/res/drawable/ic_handbook_health.xml | 8 + .../main/res/drawable/ic_handbook_people.xml | 8 + .../main/res/drawable/ic_handbook_warning.xml | 8 + app/src/main/res/layout/activity_webview.xml | 19 +++ app/src/main/res/layout/fragment_handbook.xml | 54 ++++++- .../res/layout/fragment_handbook_detail.xml | 56 +++++++ app/src/main/res/layout/item_handbook.xml | 49 ++++++ .../main/res/navigation/mobile_navigation.xml | 33 ++++- 20 files changed, 785 insertions(+), 40 deletions(-) create mode 100644 app/src/main/java/com/kbs/kbsintranett/HandbookAdapter.java create mode 100644 app/src/main/java/com/kbs/kbsintranett/HandbookDetailFragment.java create mode 100644 app/src/main/java/com/kbs/kbsintranett/HandbookItem.java create mode 100644 app/src/main/java/com/kbs/kbsintranett/HandbookPage.java create mode 100644 app/src/main/java/com/kbs/kbsintranett/InternalLinkMovementMethod.java create mode 100644 app/src/main/java/com/kbs/kbsintranett/WebViewActivity.java create mode 100644 app/src/main/res/drawable/ic_handbook_car.xml create mode 100644 app/src/main/res/drawable/ic_handbook_doc.xml create mode 100644 app/src/main/res/drawable/ic_handbook_general.xml create mode 100644 app/src/main/res/drawable/ic_handbook_health.xml create mode 100644 app/src/main/res/drawable/ic_handbook_people.xml create mode 100644 app/src/main/res/drawable/ic_handbook_warning.xml create mode 100644 app/src/main/res/layout/activity_webview.xml create mode 100644 app/src/main/res/layout/fragment_handbook_detail.xml create mode 100644 app/src/main/res/layout/item_handbook.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 45da725..4858af9 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,25 +1,17 @@ + - - - - + + - - - - + + { + + private List fullList; + private List filteredList; + private OnItemClickListener listener; + + public interface OnItemClickListener { + void onItemClick(HandbookItem item); + } + + public HandbookAdapter(List items, OnItemClickListener listener) { + this.fullList = items; + this.filteredList = new ArrayList<>(items); + this.listener = listener; + } + + @NonNull + @Override + public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_handbook, parent, false); + return new ViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ViewHolder holder, int position) { + HandbookItem item = filteredList.get(position); + holder.title.setText(item.getTitle()); + + // Håndter ingress: Kutt etter 80 tegn hvis den er veldig lang + String desc = item.getDescription(); + if (desc == null) desc = ""; + if (desc.length() > 100) { + desc = desc.substring(0, 100) + "..."; + } + holder.desc.setText(desc); + + // Mapp ikon-type til ressurs (Utvidet liste fra PHP v3.0) + int iconRes = R.drawable.ic_handbook_general; // Fallback + String type = item.getIconType() != null ? item.getIconType() : ""; + + switch (type) { + case "car": iconRes = R.drawable.ic_handbook_car; break; + case "health": iconRes = R.drawable.ic_handbook_health; break; + case "people": iconRes = R.drawable.ic_handbook_people; break; + case "warning": iconRes = R.drawable.ic_handbook_warning; break; + case "doc": iconRes = R.drawable.ic_handbook_doc; break; + case "card": iconRes = R.drawable.ic_handbook_doc; break; // Bruker doc inntil videre + case "computer": iconRes = R.drawable.ic_handbook_general; break; + case "calendar": iconRes = R.drawable.ic_handbook_general; break; + case "money": iconRes = R.drawable.ic_handbook_doc; break; + case "helmet": iconRes = R.drawable.ic_handbook_warning; break; + case "trash": iconRes = R.drawable.ic_handbook_general; break; + case "book": iconRes = R.drawable.ic_book; break; // Gjenbruk eksisterende ic_book + case "chat": iconRes = R.drawable.ic_handbook_people; break; + default: iconRes = R.drawable.ic_handbook_general; break; + } + holder.icon.setImageResource(iconRes); + + holder.itemView.setOnClickListener(v -> listener.onItemClick(item)); + } + + @Override + public int getItemCount() { + return filteredList.size(); + } + + public void filter(String query) { + filteredList.clear(); + if (query.isEmpty()) { + filteredList.addAll(fullList); + } else { + String q = query.toLowerCase(); + for (HandbookItem item : fullList) { + if (item.getTitle().toLowerCase().contains(q) || + (item.getDescription() != null && item.getDescription().toLowerCase().contains(q))) { + filteredList.add(item); + } + } + } + notifyDataSetChanged(); + } + + public static class ViewHolder extends RecyclerView.ViewHolder { + TextView title, desc; + ImageView icon; + + public ViewHolder(View view) { + super(view); + title = view.findViewById(R.id.title); + desc = view.findViewById(R.id.desc); + icon = view.findViewById(R.id.icon); + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/kbs/kbsintranett/HandbookDetailFragment.java b/app/src/main/java/com/kbs/kbsintranett/HandbookDetailFragment.java new file mode 100644 index 0000000..002d3a3 --- /dev/null +++ b/app/src/main/java/com/kbs/kbsintranett/HandbookDetailFragment.java @@ -0,0 +1,95 @@ +// FILSTI: app\src\main\java\com\kbs\kbsintranett\HandbookDetailFragment.java +package com.kbs.kbsintranett; + +import android.os.Bundle; +import android.text.Html; +import android.text.method.LinkMovementMethod; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ProgressBar; +import android.widget.TextView; +import android.widget.Toast; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.appcompat.widget.Toolbar; +import androidx.core.text.HtmlCompat; // Bedre HTML støtte +import androidx.fragment.app.Fragment; +import androidx.navigation.Navigation; +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; + +public class HandbookDetailFragment extends Fragment { + + private int pageId; + private String pageTitle; // Fallback tittel før lasting + private TextView titleView; + private TextView contentView; + private ProgressBar progressBar; + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + return inflater.inflate(R.layout.fragment_handbook_detail, container, false); + } + + @Override + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + + // Hent argumenter fra navigasjon + if (getArguments() != null) { + pageId = getArguments().getInt("page_id"); + pageTitle = getArguments().getString("page_title"); + } + + Toolbar toolbar = view.findViewById(R.id.detail_toolbar); + toolbar.setTitle("Håndbok"); + toolbar.setNavigationOnClickListener(v -> Navigation.findNavController(view).navigateUp()); + + titleView = view.findViewById(R.id.detail_title); + contentView = view.findViewById(R.id.detail_content); + progressBar = view.findViewById(R.id.detail_loading); + + titleView.setText(pageTitle); // Sett midlertidig tittel + + fetchContent(); + } + + private void fetchContent() { + progressBar.setVisibility(View.VISIBLE); + + RetrofitClient.getApiService().getHandbookPage(pageId).enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + if (!isAdded()) return; + progressBar.setVisibility(View.GONE); + + if (response.isSuccessful() && response.body() != null) { + HandbookPage page = response.body(); + titleView.setText(page.title); + + // RENDERING AV HTML + // HtmlCompat.FROM_HTML_MODE_COMPACT håndterer grunnleggende tags (p, br, b, i, h1-h6, ul, li) + // Det støtter dessverre ikke tabeller eller bilder optimalt rett i TextView. + if (page.content != null) { + contentView.setText(HtmlCompat.fromHtml(page.content, HtmlCompat.FROM_HTML_MODE_COMPACT)); + contentView.setMovementMethod(LinkMovementMethod.getInstance()); // Gjør linker klikkbare + } else { + contentView.setText("Ingen innhold funnet."); + } + } else { + Toast.makeText(getContext(), "Kunne ikke laste innhold.", Toast.LENGTH_SHORT).show(); + } + } + + @Override + public void onFailure(Call call, Throwable t) { + if (!isAdded()) return; + progressBar.setVisibility(View.GONE); + Toast.makeText(getContext(), "Nettverksfeil", Toast.LENGTH_SHORT).show(); + } + }); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/kbs/kbsintranett/HandbookFragment.java b/app/src/main/java/com/kbs/kbsintranett/HandbookFragment.java index 6cd7db3..d62066e 100644 --- a/app/src/main/java/com/kbs/kbsintranett/HandbookFragment.java +++ b/app/src/main/java/com/kbs/kbsintranett/HandbookFragment.java @@ -1,12 +1,91 @@ +// FILSTI: app\src\main\java\com\kbs\kbsintranett\HandbookFragment.java package com.kbs.kbsintranett; -import androidx.fragment.app.Fragment; // Viktig import! +import android.os.Bundle; +import android.text.Editable; +import android.text.TextWatcher; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.EditText; +import android.widget.ProgressBar; +import android.widget.Toast; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; +import androidx.navigation.Navigation; // Viktig +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; +import java.util.List; +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; public class HandbookFragment extends Fragment { - // Tomt innhold er OK, men klassen må hete det samme som filnavnet - // og den må arve fra (extends) Fragment. - public HandbookFragment() { - super(R.layout.fragment_home); // Kobler til layouten automatisk + private RecyclerView recyclerView; + private ProgressBar progressBar; + private EditText searchField; + private HandbookAdapter adapter; + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + return inflater.inflate(R.layout.fragment_handbook, container, false); + } + + @Override + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + + recyclerView = view.findViewById(R.id.recycler_handbook); + progressBar = view.findViewById(R.id.progressBar); + searchField = view.findViewById(R.id.search_field); + + recyclerView.setLayoutManager(new GridLayoutManager(getContext(), 2)); + + searchField.addTextChangedListener(new TextWatcher() { + @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) {} + @Override public void onTextChanged(CharSequence s, int start, int before, int count) {} + @Override public void afterTextChanged(Editable s) { + if (adapter != null) adapter.filter(s.toString()); + } + }); + + fetchHandbook(); + } + + private void fetchHandbook() { + RetrofitClient.getApiService().getHandbookItems().enqueue(new Callback>() { + @Override + public void onResponse(Call> call, Response> response) { + if (!isAdded()) return; + progressBar.setVisibility(View.GONE); + + if (response.isSuccessful() && response.body() != null) { + adapter = new HandbookAdapter(response.body(), item -> { + // NYTT: Naviger til Native Detail Fragment + Bundle bundle = new Bundle(); + bundle.putInt("page_id", item.getId()); + bundle.putString("page_title", item.getTitle()); + + Navigation.findNavController(getView()) + .navigate(R.id.action_handbook_to_detail, bundle); + }); + recyclerView.setAdapter(adapter); + } else { + String msg = "Kunne ikke laste håndboken. Kode: " + response.code(); + if (response.code() == 404) msg += "\n(Fant ikke foreldresiden 'interninstruks-hms')"; + Toast.makeText(getContext(), msg, Toast.LENGTH_LONG).show(); + } + } + + @Override + public void onFailure(Call> call, Throwable t) { + if (!isAdded()) return; + progressBar.setVisibility(View.GONE); + Toast.makeText(getContext(), "Nettverksfeil", Toast.LENGTH_SHORT).show(); + } + }); } } \ No newline at end of file diff --git a/app/src/main/java/com/kbs/kbsintranett/HandbookItem.java b/app/src/main/java/com/kbs/kbsintranett/HandbookItem.java new file mode 100644 index 0000000..ae1266a --- /dev/null +++ b/app/src/main/java/com/kbs/kbsintranett/HandbookItem.java @@ -0,0 +1,28 @@ +// FILSTI: app\src\main\java\com\kbs\kbsintranett\HandbookItem.java +package com.kbs.kbsintranett; + +import com.google.gson.annotations.SerializedName; +import java.io.Serializable; + +public class HandbookItem implements Serializable { + @SerializedName("id") + private int id; // NYTT + + @SerializedName("title") + private String title; + + @SerializedName("desc") + private String description; + + @SerializedName("icon_type") + private String iconType; + + @SerializedName("url") + private String url; + + public int getId() { return id; } + public String getTitle() { return title; } + public String getDescription() { return description; } + public String getIconType() { return iconType; } + public String getUrl() { return url; } +} \ No newline at end of file diff --git a/app/src/main/java/com/kbs/kbsintranett/HandbookPage.java b/app/src/main/java/com/kbs/kbsintranett/HandbookPage.java new file mode 100644 index 0000000..c7f92b8 --- /dev/null +++ b/app/src/main/java/com/kbs/kbsintranett/HandbookPage.java @@ -0,0 +1,15 @@ +// FILSTI: app\src\main\java\com\kbs\kbsintranett\HandbookPage.java +package com.kbs.kbsintranett; + +import com.google.gson.annotations.SerializedName; + +public class HandbookPage { + @SerializedName("id") + public int id; + + @SerializedName("title") + public String title; + + @SerializedName("content") + public String content; // Dette er HTML-strengen +} \ No newline at end of file diff --git a/app/src/main/java/com/kbs/kbsintranett/InternalLinkMovementMethod.java b/app/src/main/java/com/kbs/kbsintranett/InternalLinkMovementMethod.java new file mode 100644 index 0000000..2d8c52a --- /dev/null +++ b/app/src/main/java/com/kbs/kbsintranett/InternalLinkMovementMethod.java @@ -0,0 +1,140 @@ +// FILSTI: app\src\main\java\com\kbs\kbsintranett\InternalLinkMovementMethod.java +package com.kbs.kbsintranett; + +import android.content.Context; +import android.content.Intent; +import android.net.Uri; +import android.os.Bundle; // <-- Sjekk at denne er med! +import android.text.Spannable; +import android.text.method.LinkMovementMethod; +import android.text.style.URLSpan; +import android.util.Log; +import android.view.MotionEvent; +import android.view.View; +import android.widget.TextView; +import android.widget.Toast; + +import androidx.navigation.Navigation; + +import com.google.gson.JsonObject; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; + +public class InternalLinkMovementMethod extends LinkMovementMethod { + private static InternalLinkMovementMethod instance; + private static final String TAG = "InternalLinkMethod"; + + public static InternalLinkMovementMethod getInstance() { + if (instance == null) instance = new InternalLinkMovementMethod(); + return instance; + } + + @Override + public boolean onTouchEvent(TextView widget, Spannable buffer, MotionEvent event) { + int action = event.getAction(); + + if (action == MotionEvent.ACTION_UP) { + int x = (int) event.getX(); + int y = (int) event.getY(); + + x -= widget.getTotalPaddingLeft(); + y -= widget.getTotalPaddingTop(); + + x += widget.getScrollX(); + y += widget.getScrollY(); + + int line = widget.getLayout().getLineForVertical(y); + int off = widget.getLayout().getOffsetForHorizontal(line, x); + + URLSpan[] link = buffer.getSpans(off, off, URLSpan.class); + if (link.length != 0) { + String url = link[0].getURL(); + handleLink(widget.getContext(), url, widget); + return true; + } + } + return super.onTouchEvent(widget, buffer, event); + } + + private void handleLink(Context context, String url, View view) { + Log.d(TAG, "Link clicked: " + url); + + // 1. Sjekk om det er en intern lenke + if (url.contains("intranet.kbs.no") || url.startsWith("/")) { + + // a) Prøv å finne ID hvis den finnes i URLen (?p=123) + int pageId = extractIdFromUrl(url); + + if (pageId > 0) { + navigateToInternalPage(view, pageId, "Laster..."); + } else { + // b) Det er en "pen" URL. Vi må spørre APIet hva IDen er. + // Vi bruker Toast for å gi feedback om at noe skjer + Toast.makeText(context, "Åpner side...", Toast.LENGTH_SHORT).show(); + + RetrofitClient.getApiService().lookupPageId(url).enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + if (response.isSuccessful() && response.body() != null) { + int id = response.body().get("id").getAsInt(); + if (id > 0) { + // Suksess! Naviger internt + navigateToInternalPage(view, id, "Laster..."); + } else { + // Fant ikke ID, åpne i WebView som fallback + openInWebView(context, url); + } + } else { + openInWebView(context, url); + } + } + + @Override + public void onFailure(Call call, Throwable t) { + openInWebView(context, url); + } + }); + } + } else { + // Ekstern lenke - åpne i nettleser + Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); + context.startActivity(browserIntent); + } + } + + private int extractIdFromUrl(String url) { + Pattern p = Pattern.compile("[?&](p|page_id|post)=([0-9]+)"); + Matcher m = p.matcher(url); + if (m.find()) { + try { + return Integer.parseInt(m.group(2)); + } catch (NumberFormatException e) { + return 0; + } + } + return 0; + } + + private void navigateToInternalPage(View view, int pageId, String title) { + try { + Bundle bundle = new Bundle(); + bundle.putInt("page_id", pageId); + bundle.putString("page_title", title); + Navigation.findNavController(view).navigate(R.id.action_handbook_to_detail, bundle); + } catch (Exception e) { + Log.e(TAG, "Kunne ikke navigere", e); + } + } + + private void openInWebView(Context context, String url) { + Intent intent = new Intent(context, WebViewActivity.class); + intent.putExtra(WebViewActivity.EXTRA_URL, url); + intent.putExtra(WebViewActivity.EXTRA_TITLE, "KBS Intranett"); + context.startActivity(intent); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/kbs/kbsintranett/WebViewActivity.java b/app/src/main/java/com/kbs/kbsintranett/WebViewActivity.java new file mode 100644 index 0000000..64d136f --- /dev/null +++ b/app/src/main/java/com/kbs/kbsintranett/WebViewActivity.java @@ -0,0 +1,54 @@ +package com.kbs.kbsintranett; + +import android.annotation.SuppressLint; +import android.os.Bundle; +import android.webkit.CookieManager; +import android.webkit.WebSettings; +import android.webkit.WebView; +import android.webkit.WebViewClient; +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.Toolbar; + +public class WebViewActivity extends AppCompatActivity { + + public static final String EXTRA_URL = "extra_url"; + public static final String EXTRA_TITLE = "extra_title"; + + @SuppressLint("SetJavaScriptEnabled") + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_webview); + + String url = getIntent().getStringExtra(EXTRA_URL); + String title = getIntent().getStringExtra(EXTRA_TITLE); + + Toolbar toolbar = findViewById(R.id.toolbar); + toolbar.setTitle(title != null ? title : "Håndbok"); + toolbar.setNavigationIcon(android.R.drawable.ic_menu_revert); + toolbar.setNavigationOnClickListener(v -> finish()); + + WebView webView = findViewById(R.id.webview); + WebSettings settings = webView.getSettings(); + settings.setJavaScriptEnabled(true); + settings.setDomStorageEnabled(true); + settings.setBuiltInZoomControls(true); + settings.setDisplayZoomControls(false); + + // --- MAGIEN SKJER HER: INJISER COOKIE --- + String cookie = UserManager.getInstance().getCookie(); + if (cookie != null && !cookie.isEmpty()) { + CookieManager cookieManager = CookieManager.getInstance(); + cookieManager.setAcceptCookie(true); + // Vi antar at domenet er intranet.kbs.no basert på APIet + cookieManager.setCookie("https://intranet.kbs.no", cookie); + } + // ---------------------------------------- + + webView.setWebViewClient(new WebViewClient()); // Åpne linker i samme WebView + + if (url != null) { + webView.loadUrl(url); + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/kbs/kbsintranett/WordPressApiService.java b/app/src/main/java/com/kbs/kbsintranett/WordPressApiService.java index f97e480..c4e6b51 100644 --- a/app/src/main/java/com/kbs/kbsintranett/WordPressApiService.java +++ b/app/src/main/java/com/kbs/kbsintranett/WordPressApiService.java @@ -1,7 +1,7 @@ -// FILSTI: app\src\main\java\com\kbs\kbsintranett\WordPressApiService.java package com.kbs.kbsintranett; import com.google.gson.JsonElement; +import com.google.gson.JsonObject; // NY IMPORT import java.util.List; import java.util.Map; import okhttp3.MultipartBody; @@ -17,27 +17,21 @@ import retrofit2.http.PartMap; import retrofit2.http.Query; public interface WordPressApiService { - // 1. Hent nyheter @GET("wp-json/wp/v2/posts?per_page=10&_embed") Call> getPosts(); - // 2. Hent et spesifikt skjema med ID (Oppdatert til custom endpoint for tilgang) @GET("wp-json/kbs/v1/forms/{id}") Call getForm(@Path("id") int formId); - // 3. SEND INN SKJEMA (JSON-data uten filer) @POST("wp-json/gf/v2/forms/{id}/submissions") Call submitForm(@Path("id") int formId, @Body FormSubmission submission); - // 4. LOGIN MED GOOGLE @POST("wp-json/kbs/v1/login") Call googleLogin(@Body LoginRequest request); - // 5. HENT LISTE AV SKJEMAER (Oppdatert til custom endpoint og List) @GET("wp-json/kbs/v1/forms") Call> getFormsList(); - // 6. SEND INN SKJEMA (MULTIPART - for filopplasting) @Multipart @POST("wp-json/gf/v2/forms/{id}/submissions") Call submitMultipartForm( @@ -46,11 +40,9 @@ public interface WordPressApiService { @Part List files ); - // 7. HENT KALENDERHENDELSER @GET("wp-json/kbs/v1/calendar/events") Call> getCalendarEvents(); - // 8. HENT INNSENDINGER (Entries) - LISTE @GET("wp-json/gf/v2/entries") Call getEntries( @Query("form_ids") int formId, @@ -58,11 +50,19 @@ public interface WordPressApiService { @Query("paging[page_size]") int pageSize ); - // 9. HENT ÉN ENKELT INNSENDING @GET("wp-json/gf/v2/entries/{entry_id}") Call getSingleEntry(@Path("entry_id") String entryId); - // 10. HENT ALLE NYHETER (F.eks 50 stk) - Brukes av "Se alle" siden @GET("wp-json/wp/v2/posts?per_page=50&_embed") Call> getAllPosts(); + + @GET("wp-json/kbs/v1/handbook") + Call> getHandbookItems(); + + @GET("wp-json/kbs/v1/handbook/{id}") + Call getHandbookPage(@Path("id") int id); + + // NY: Slå opp ID fra URL + @GET("wp-json/kbs/v1/lookup-id") + Call lookupPageId(@Query("url") String url); } \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_handbook_car.xml b/app/src/main/res/drawable/ic_handbook_car.xml new file mode 100644 index 0000000..57aa347 --- /dev/null +++ b/app/src/main/res/drawable/ic_handbook_car.xml @@ -0,0 +1,8 @@ + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_handbook_doc.xml b/app/src/main/res/drawable/ic_handbook_doc.xml new file mode 100644 index 0000000..6244c39 --- /dev/null +++ b/app/src/main/res/drawable/ic_handbook_doc.xml @@ -0,0 +1,8 @@ + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_handbook_general.xml b/app/src/main/res/drawable/ic_handbook_general.xml new file mode 100644 index 0000000..ac0f0be --- /dev/null +++ b/app/src/main/res/drawable/ic_handbook_general.xml @@ -0,0 +1,8 @@ + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_handbook_health.xml b/app/src/main/res/drawable/ic_handbook_health.xml new file mode 100644 index 0000000..3de0738 --- /dev/null +++ b/app/src/main/res/drawable/ic_handbook_health.xml @@ -0,0 +1,8 @@ + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_handbook_people.xml b/app/src/main/res/drawable/ic_handbook_people.xml new file mode 100644 index 0000000..ef1ae42 --- /dev/null +++ b/app/src/main/res/drawable/ic_handbook_people.xml @@ -0,0 +1,8 @@ + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_handbook_warning.xml b/app/src/main/res/drawable/ic_handbook_warning.xml new file mode 100644 index 0000000..662481c --- /dev/null +++ b/app/src/main/res/drawable/ic_handbook_warning.xml @@ -0,0 +1,8 @@ + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_webview.xml b/app/src/main/res/layout/activity_webview.xml new file mode 100644 index 0000000..20a1d34 --- /dev/null +++ b/app/src/main/res/layout/activity_webview.xml @@ -0,0 +1,19 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_handbook.xml b/app/src/main/res/layout/fragment_handbook.xml index e6fda5a..0de1f1c 100644 --- a/app/src/main/res/layout/fragment_handbook.xml +++ b/app/src/main/res/layout/fragment_handbook.xml @@ -1,11 +1,53 @@ - - + + + + + + + + + - \ No newline at end of file + android:layout_marginTop="32dp"/> + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_handbook_detail.xml b/app/src/main/res/layout/fragment_handbook_detail.xml new file mode 100644 index 0000000..3860178 --- /dev/null +++ b/app/src/main/res/layout/fragment_handbook_detail.xml @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_handbook.xml b/app/src/main/res/layout/item_handbook.xml new file mode 100644 index 0000000..8f91a98 --- /dev/null +++ b/app/src/main/res/layout/item_handbook.xml @@ -0,0 +1,49 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/navigation/mobile_navigation.xml b/app/src/main/res/navigation/mobile_navigation.xml index c6baa7c..598b6b7 100644 --- a/app/src/main/res/navigation/mobile_navigation.xml +++ b/app/src/main/res/navigation/mobile_navigation.xml @@ -22,15 +22,12 @@ android:name="com.kbs.kbsintranett.HomeFragment" android:label="Hjem" tools:layout="@layout/fragment_home"> - - - @@ -62,9 +59,10 @@ android:id="@+id/navigation_forms" android:name="com.kbs.kbsintranett.FormsListFragment" android:label="Skjemaer" - tools:layout="@layout/fragment_forms_list"> + tools:layout="@layout/fragment_forms_list"> + + tools:layout="@layout/fragment_handbook"> + + + + + + + + +